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

 

 

posted @ 2018-01-31 23:00  两猿社  阅读(11066)  评论(0编辑  收藏  举报