OpenCV-顏色通道的分離、合併
author@jason_ql
http://blog.csdn.net/lql0716
OpenCV-顏色通道的分離、合併
顏色通道的分離:split()
c++: void split(const mat& src, mat* mvbegin);
c++: void split(inputarray m, outputarrayofarrays mv);第一個參數,inputarray類型的m或者const mat&類型的src,填我們需要進行分離的多通道數組。
第二個參數,outputarrayofarrays類型的mv,填函數的輸出數組或者輸出的vector容器
顏色通道的合併:merge()
merge()函數是split()函數的逆向操作,將多個數組合併成一個多通道的數組。它通過組合一些給定的單通道數組,將這些孤立的單通道數組合併成一個多通道的數組,從而創建出一個由多個單通道陣列組成的多通道陣列。
C++; void merge(const Mat* mv, size_tcount, OutputArray dst)
C++: void merge(InputArrayOfArrays mv, OutputArray dst)第一個參數,mv。填需要被合併的輸入矩陣或vector容器的陣列,這個mv參數中所有的矩陣必須有着一樣的尺寸和深度。
第二個參數,count。當mv爲一個空白的C數組時,代表輸入矩陣的個數,這個參數顯然必須大於1
第三個參數,dst。即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,並且通洞數量是矩陣陣列中的通道的總數。
顏色通道的分離、合併代碼示例
#include <opencv2/opencv.hpp>
//#include <opencv2/highgui/highgui.hpp>
//#include <opencv2/imgproc/imgproc.hpp>
//#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;
//-------------------------------------------------
// 顏色通道的分離、合併
//通道分離:split()
//通道合併:merge()
//-------------------------------------------------
//split()
//c++: void split(const mat& src, mat* mvbegin);
//c++: void split(inputarray m, outputarrayofarrays mv);
//第一個參數,inputarray類型的m或者const mat&類型的src,填我們需要進行分離的多通道數組
//第二個參數,outputarrayofarrays類型的mv,填函數的輸出數組或者輸出的vector容器
//
//merge()
//merge()函數是split()函數的逆向操作,將多個數組合併成一個多通道的數組。它通過組合一些
//給定的單通道數組,將這些孤立的單通道數組合併成一個多通道的數組,從而創建出一個由多個
//單通道陣列組成的多通道陣列。
//C++; void merge(const Mat* mv, size_tcount, OutputArray dst)
//C++: void merge(InputArrayOfArrays mv, OutputArray dst)
//第一個參數,mv。填需要被合併的輸入矩陣或vector容器的陣列,這個mv參數中所有的矩陣必須
//有着一樣的尺寸和深度。
//第二個參數,count。當mv爲一個空白的C數組時,代表輸入矩陣的個數,這個參數顯然必須大於1
//第三個參數,dst。即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,並且通洞數量是矩陣陣列中的
//通道的總數。
//-------------------------------------------------
//------------------------------------【main()函數】-----------------------------------
// 描述:控制檯應用程序的入口函數,我們的程序從這裏開始
//-------------------------------------------------------------------------------------
int main()
{
cv::Mat srcImage, dst;
std::vector<cv::Mat> channels;
srcImage = cv::imread("D:/test/source/img/031.jpg");
//把一個3通道圖像轉換爲3個單通道圖像,分別存儲在channels[0], channels[1], channels[2]
cv::split(srcImage, channels); //分離色彩通道
cv::merge(channels, dst); //合併色彩通道
cv::imshow("img1", channels[0]);
cv::imshow("img2", channels[1]);
cv::imshow("img3", channels[2]);
cv::imshow("img4", dst);
cv::waitKey(0);
}