【问题标题】:Opencv: Converting hue image to RGB imageOpencv:将色调图像转换为RGB图像
【发布时间】:2011-03-02 11:39:34
【问题描述】:

我正在尝试显示来自我的网络摄像头的图像的色调分量。我已将图像拆分为色调分量,但我不知道如何将色调分量显示为纯色。例如,如果图像的一个像素是 B=189 G=60 R=60,那么在 HSV 中,H=0。我不希望绘制图像是色调的灰度值,而是色调的 RGB 等效值或 H=0 -> B=0 G=0 R=255

IplImage *image, *imageHSV, *imageHue;
image = cvQueryFrame(capture); //image from webcam
imageHSV = cvCreateImage( cvGetSize(image), IPL_DEPTH_8U, 3 );
imageHue = cvCreateImage( cvGetSize(image), IPL_DEPTH_8U, 1 );
cvCvtColor( image, imageHSV, CV_BGR2HSV );
cvSplit( imageHSV, imageHue, 0, 0, 0 );

我感觉有一个简单的解决方案,因此我们不胜感激。

【问题讨论】:

  • 您可以通过单击他/她的答案旁边的空心复选标记来接受 zerm 的答案作为正确答案。您也可以通过点击答案旁边的向上箭头来投票。

标签: colors opencv rgb


【解决方案1】:

如果我对您的理解正确,您想“正确地”可视化 Hue 组件。您可以创建另一个 imageSatimageVal,每个通道一个并填充 255(最大)。然后cvMerge 你的imageHue 与另外两个一起创建一个新的 HSV 图像,并将其转换回 RGB/BGR 以进行最终显示。

【讨论】:

  • 效果很好,谢谢!我之前尝试过 cvMerge,但我想我从来没有想过用最大值填充每个图像。
  • 如果你不关心 S/V,你不需要拆分它,只需将它们设置为最大值。我不知道,但我认为 cvSetCOI(hsvimg, 2); cvSet(hsvimg, 255);以及 3 的相同可能已经起作用。完成后不要忘记将 COI(感兴趣的频道)重置为 0(=无频道,使用整个图像)。