Opencv筆記3:分離顏色通道&多通道圖像混合

一、分離顏色通道
這個(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);  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容