zoukankan      html  css  js  c++  java
  • 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);

     

  • 相关阅读:
    POJ2594拐点弯的二分
    poj1523赤裸裸的割点
    POJ2239二分匹配
    对java多线程的一些浅浅的理解
    POJ3216 最小路径覆盖
    POJ1719二分匹配
    [算法]本学期算法作业
    [离散数学II]2017.3.29
    [离散数学II]2017.3.29
    [概率论]2017.3.29
  • 原文地址:https://www.cnblogs.com/qinguoyi/p/8395271.html
Copyright © 2011-2022 走看看