split函數的功能是通道分離
函數原型為:
void split(const Mat& src,Mat *mvBegin);
第一個參數為要進行分離的圖像矩陣,第二個參數可以是Mat數組的首地址,或者一個vector<Mat>對象第一個參數為要進行分離的圖像矩陣,第二個參數可以是Mat數組的首地址,或者一個vector<Mat>對象
std::vector<Mat> channels; Mat aChannels[3]; //src為要分離的Mat對象 split(src, aChannels); //利用數組分離 split(src, channels); //利用vector對象分離 imshow("B",channels[0]); imshow("G",channels[1]); imshow("R",channels[2]);
注意:opencv中,RGB三個通道是反過來的
可能有人會問為什么分離出的通道都是黑白灰,而不是紅綠藍。原因是分離后為單通道,相當於分離通道的同時把其他兩個通道填充了相同的數值。比如紅色通道,分離出紅色通道的同時,綠色和藍色被填充為和紅色相同的數值,這樣一來就只有黑白灰了。那么紅色體現在哪呢?可以進行觀察,會發現原圖中顏色越接近紅色的地方在紅色通道越接近白色。在純紅的地方在紅色通道會出現純白。
此外,如果split函數輸入的圖像為HSV的,則分離后,channels[0]對應H,channels[1]對應S,channels[2]對應V
注:此為轉載原文地址為
http://blog.csdn.net/alickr/article/details/51503133