Opencv中RGB通道/HSV通道并分离

 OpenCV中HSV颜色模型及颜色份量范围html

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

【opencv】在hsv颜色空间识别区域颜色spa

  将原图分离为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);

相关文章
相关标签/搜索