將原圖分離爲RGB單通道和B三通道(GR通道均爲0).net
1 Mat src_color = imread(path); 2 vector<Mat> channels; 3 vector<Mat> mbgr(3); 4 split(src_color, channels); 5 Mat B = channels.at(0); 6 Mat G = channels.at(1); 7 Mat R = channels.at(2); 8 Mat bk1(src_color.size(), CV_8UC1, Scalar(0)); 9 Mat imageB(src_color.size(), CV_8UC3); 10 mbgr[0] = B; 11 mbgr[1] = bk1; 12 mbgr[2] = bk1; 13 merge(mbgr, imageB); 14 imshow("imageB", imageB); 15 imshow("原圖", src_color); 16 imshow("B", B); 17 imshow("G", G); 18 imshow("R", R); 19 waitKey(0);
利用opencv把RGB圖片像HSV顏色空間轉變的時候,H通道的值範圍爲: 0-180,S: 0-255,V:0-255。code
利用直方圖顯示三個通道的時候,H通道都集中在前半部分,想讓它取值範圍擴大。後來發現了 CV_BGR2HSV_FULL ,CV_BGR2HSV 在轉換圖像的時候是將 H / 2 ---> H ,咱們知道圖像中色相H的取值範圍爲 0-360 ,因此利用opencv轉換以後獲得的H的範圍爲 0-180。而 CV_BGR2HSV_FULL 實現的映射是 H * 255 / 360 --->H , 因此利用_FULL 這個轉換獲得的H通道圖像的範圍爲 0-255這兩種方式都是opencv把[0-360] 的數據壓縮到一個字節能夠處理的數據。[ 因此這裏說的圖像的depth = 8, 恰好能表示的最大值是 255]htm
1 Mat src_hsv; 2 cvtColor(src_color, src_hsv, CV_BGR2HSV_FULL); 3 //cvtColor(src_color, src_hsv, CV_BGR2HSV); 4 vector<Mat> hsv_channels; 5 split(src_hsv, hsv_channels); 6 Mat H = hsv_channels.at(0); 7 Mat S = hsv_channels.at(1); 8 Mat V = hsv_channels.at(2); 9 imshow("H", H); 10 imshow("S", S); 11 imshow("V", V);