Opencv中RGB通道/HSV通道並分離


 OpenCV中HSV顏色模型及顏色分量范圍

opencv HSV 顏色模型(H通道取值 && CV_BGR2HSV_FULL)

【opencv】在hsv顏色空間識別區域顏色

  將原圖分離為RGB單通道和B三通道(GR通道均為0)

 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。

  利用直方圖顯示三個通道的時候,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]

 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);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM