【问题标题】:Hue value range in opencvopencv中的色相值范围
【发布时间】:2019-04-28 21:18:40
【问题描述】:

注意到 OpenCV 的色调值范围为 [0 179] (Detect red circles in an image using OpenCV)(如果陈述不正确,请纠正我)。下面是我获取 Mat 图像色调值的函数:

Mat MainWindow::getHue(const Mat &src)
{
    Mat bgr32; //CV_32FC3
    src.convertTo(bgr32,CV_32FC3,1/255.0);

    Mat hsv(bgr32.size(), CV_32FC3);
    cvtColor(bgr32,hsv, COLOR_BGR2HSV);

    Mat hue(hsv.size(), CV_32FC1);
    Mat sat(hsv.size(), CV_32FC1);
    Mat val(hsv.size(), CV_32FC1);
    Mat out[] = {hue,sat,val};
    split(hsv,out);

    return hue;
}

这样生成的色调值实际上在 [0, 360] 的范围内。问题是什么?我使用opencv3.4.5

【问题讨论】:

    标签: opencv


    【解决方案1】:

    Here 是 RGB 到 HSV 转换的文档。

    由于uchar 的范围是[0,255],因此您无法存储整个色调范围。因此,opencv 决定使用一个技巧。对于这种类型的矩阵,将色调除以 2。但是,此技巧仅用于 uchar 矩阵。可以存储整个色调范围的浮点矩阵不必求助于此。

    要查看实际操作,只需使用uchar 矩阵:

    Mat MainWindow::getHue(const Mat &src)
    {
    
        Mat hsv(src.size(), CV_8UC3);
        cvtColor(src,hsv, COLOR_BGR2HSV);
    
        Mat hue(hsv.size(), CV_8UC1);
        Mat sat(hsv.size(), CV_8UC1);
        Mat val(hsv.size(), CV_8UC1);
        Mat out[] = {hue,sat,val};
        split(hsv,out);
    
        return hue;
    }
    

    现在hue 在 [0, 180] 范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-09
      • 2019-10-27
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多