一、分離顏色通道
這個(gè)split函數(shù)的C++版本有兩個(gè)原型,他們分別是:
C++: void split(const Mat& src, Mat*mvbegin);
C++: void split(InputArray m,OutputArrayOfArrays mv);
關(guān)于變量介紹:
第一個(gè)參數(shù),InputArray類型的m或者const Mat&類型的src,填我們需要進(jìn)行分離的多通道數(shù)組。
第二個(gè)參數(shù),OutputArrayOfArrays類型的mv,填函數(shù)的輸出數(shù)組或者輸出的vector容器。
split函數(shù)分割多通道數(shù)組轉(zhuǎn)換成獨(dú)立的單通道數(shù)組,按公式來(lái)看就是這樣:
Paste_Image.png
最后看一個(gè)示例吧:
Mat srcImage;
Mat imageROI;
vector<Mat> channels;
srcImage= cv::imread("dota.jpg");
// 把一個(gè)3通道圖像轉(zhuǎn)換成3個(gè)單通道圖像
split(srcImage,channels);//分離色彩通道
imageROI=channels.at(0);
addWeighted(imageROI(Rect(385,250,logoImage.cols,logoImage.rows)),1.0,
logoImage,0.5,0.,imageROI(Rect(385,250,logoImage.cols,logoImage.rows)));
merge(channels,srcImage4);
namedWindow("sample");
imshow("sample",srcImage);
merge函數(shù)詳解
merge()函數(shù)的功能是split()函數(shù)的逆向操作,將多個(gè)數(shù)組組合合并成一個(gè)多通道的數(shù)組
C++: void merge(const Mat* mv, size_tcount, OutputArray dst)
C++: void merge(InputArrayOfArrays mv,OutputArray dst)
第一個(gè)參數(shù),mv,填需要被合并的輸入矩陣或vector容器的陣列,這個(gè)mv參數(shù)中所有的矩陣必須有著一樣的尺寸和深度。
第二個(gè)參數(shù),count,當(dāng)mv為一個(gè)空白的C數(shù)組時(shí),代表輸入矩陣的個(gè)數(shù),這個(gè)參數(shù)顯然必須大于1.
第三個(gè)參數(shù),dst,即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,并且通道的數(shù)量是矩陣陣列中的通道的總數(shù)。
來(lái)一個(gè)示例吧:
vector<Mat> channels;
Mat imageBlueChannel;
Mat imageGreenChannel;
Mat imageRedChannel;
srcImage4= imread("dota.jpg");
// 把一個(gè)3通道圖像轉(zhuǎn)換成3個(gè)單通道圖像
split(srcImage4,channels);//分離色彩通道
imageBlueChannel = channels.at(0);
imageGreenChannel = channels.at(1);
imageRedChannel = channels.at(2);