从 RGB 到 HSV 的 OpenCV 图像转换

Posted

技术标签:

【中文标题】从 RGB 到 HSV 的 OpenCV 图像转换【英文标题】:OpenCV image conversion from RGB to HSV 【发布时间】:2010-06-10 18:58:40 【问题描述】:

当我在示例图像 (RGB) 上运行以下代码,然后对其进行处理以显示转换后的 HSV 图像时,两者似乎不同......

谁能解释为什么会这样? 或 你能建议一个解决方案来避免这种情况发生吗...因为它毕竟是同一张图片

Mat img_hsv,img_rgb,red_blob,blue_blob;
img_rgb = imread("pic.png",1);
cvtColor(img_rgb,img_hsv,CV_RGB2HSV);
namedWindow("win1", CV_WINDOW_AUTOSIZE);
imshow("win1", img_hsv);

【问题讨论】:

您需要将HSV 图像转换回BGR 以便与imshow() 一起显示。 【参考方案1】:

    我还不太了解新的 (2.x) OpenCV,但通常在 OpenCV 中加载的图像是 CV_BGR 通道顺序而不是 RGB,因此您很可能需要 CV_BGR2HSV

    李>

    OpenCV 实际上并不“了解” HSV,它只会在第一个通道中编码色调,在第二个通道中编码饱和度,在第三个通道中编码值。如果您在 OpenCV 中显示图像,highgui 会假定它是 BGR 图像,从而将第一个通道(现在的 Hue)解释为蓝色等。

【讨论】:

即使我尝试过那个家伙... din 也可以工作...只是输出图像中的一些细微变化...它不使用以下公式来转换给出的图像opencv.willowgarage.com/documentation/cpp/… @kaushalyjain:是的,但正如我所说:色调在第一个通道结束,S 在第二个通道,V 在第三个通道。 imshow 不解释色彩空间,它假定 BGR(至少 2.x 之前的 cvShowImage 是这种情况)。你看到的是 HSV 编码为 BGR ;) 哦!明白了……非常感谢!!我有另一个基于此的问题...我将把它作为一个新问题发布..请努力回答这个问题...! :)【参考方案2】:

正如这里已经解释的那样,在图像转换为 HSV 后立即显示图像是没有意义的,但是这里有一个如何使用 V 通道的示例:

如果您只想提取 V 通道,您可以使用 cvtColor 并使用 HSV 图像的第 3 (V) 通道来设置此图像的灰度副本强度:

Mat grayImg, hsvImg;
cvtColor(img, grayImg, CV_BGR2GRAY);
cvtColor(img, hsvImg, CV_BGR2HSV);
uchar* grayDataPtr = grayImg.data;
uchar* hsvDataPtr = hsvImg.data;
for (int i = 0; i < img.rows; i++)

    for (int j = 0; j < img.cols; j++)
    
        const int hi = i*img.cols*3 + j*3,
                  gi = i*img.cols + j;
        grayDataPtr[gi] = hsvDataPtr[hi + 2];
    

imshow("V-channel", grayImg);

【讨论】:

【参考方案3】:
cv::Mat hsv;
std::vector<cv::Mat> channels;
cv::split(hsv, channels);

也可以

[0] = H
[1] = S
[2] = V

【讨论】:

以上是关于从 RGB 到 HSV 的 OpenCV 图像转换的主要内容,如果未能解决你的问题,请参考以下文章

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

「新手必看」Python+Opencv实现摄像头调用RGB图像并转换成HSV模型

openCV中HSV颜色表示

将 Opencv hsv 转换为 Matlab Hsv

python的skimage库 图像色彩空间转换 RGB到灰度;RGB到HSV