【问题标题】:OpenCV image conversion from RGB to Grayscale using imread giving poor results使用 imread 将 OpenCV 图像从 RGB 转换为灰度,结果不佳
【发布时间】:2011-11-19 15:18:10
【问题描述】:

我正在将 PNG 文件中的 24 位 RGB 图像加载到我的 OpenCV 应用程序中。

但是,直接使用imread 将图像加载为灰度会产生非常糟糕的结果。

Mat src1 = imread(inputImageFilename1.c_str(), 0);

将 RGB 图像加载为 RGB 并将其转换为灰度可以得到更好的效果。

Mat src1 = imread(inputImageFilename1.c_str(), 1);
cvtColor(src1, src1Gray, CV_RGB2GRAY);

我想知道我是否正确使用imread 作为我的图像类型。有没有人遇到过类似的行为?

使用imread 转换为灰度的图像如下所示:

使用cvtColor 转换为灰度的图像如下所示:

【问题讨论】:

  • OpenCV 中的“Color”图像表示 BGR。所以你的代码的第二个版本不正确。它应该使用CV_BGR2GRAY 进行颜色转换。
  • 感谢您的评论。我尝试使用 CV_BGR2GRAY 而不是 CV_RGB2GRAY 将图像转换为灰度,但得到了相同的结果。
  • 你能附上你的原始图片吗?
  • 很遗憾,以我目前的声誉,我无法将图像发布到我的帖子中。此外,我的声誉帖子中的超链接限制为 2 个。
  • 感谢您的提示。原图位于:picasaweb.google.com/lh/photo/…

标签: opencv


【解决方案1】:

简单的答案是,openCV 函数使用 BGR 格式。如果你读到带有imreadVideoCapture 的图像,它总是BGR。如果使用 RGB2GRAY,则将蓝色通道与绿色通道互换。获得亮度的公式是

y = 0.587*green + 0.299*red + 0.114*blue

所以如果你改变绿色和蓝色,这将导致巨大的计算错误。

问候

【讨论】:

  • 那不也是换红道了吗?在这种情况下,将给定的BGR 解释为RGB,然后导致(实际的)B 被错误地解释为R,而R 被解释为B?因此,根据您的回答,解决方法是将cvtColor 调用中的CV_RGB2GRAY 替换为CV_BGR2GRAY?
【解决方案2】:

我今天遇到了同样的问题。最终,我比较了三种方法:

//method 1
cv::Mat gs = cv::imread(filename, CV_LOAD_IMAGE_GRAYSCALE);

//method 2
cv::Mat color = cv::imread(filename, 1); //loads color if it is available
cv::Mat gs_rgb(color.size(), CV_8UC1);
cv::cvtColor(color, gs_rgb, CV_RGB2GRAY);

//method 3
cv::Mat gs_bgr(color.size(), CV_8UC1);
cv::cvtColor(color, gs_bgr, CV_BGR2GRAY);

方法 1(加载灰度)和方法 3(CV_BGR2GRAY)产生相同的结果,而方法 2 产生不同的结果。为了我自己的目的,我已经开始使用 CV_BGR2GRAY。

我的输入文件是 jpg,因此可能存在与您的特定图像格式相关的问题。

【讨论】:

  • Opencv imread 返回 BGR 格式的图像,所以我认为正确的灰度转换是 CV_BGR2GRAY 正如你在第三种方法中提到的那样
【解决方案3】:

我曾经遇到过类似的问题,使用 OpenGL 着色器。似乎 OpenCV 读取图像的第一个容器不支持所有颜色范围,因此您会看到图像的灰度转换效果不佳。但是,一旦使用 cvtColor 将原始图像转换为灰度,容器就与第一个不同,并且支持所有范围。在我看来,第一个使用少于 8 位的灰度或更改为灰度使用了不好的方法。但是第二个由于灰度通道中的位数较多,所以图像更平滑。

【讨论】:

  • 您是否找到了支持此推理的文档?面对类似的问题,我倾向于相信这可能是这种情况,但在我的推理中找不到任何结论性的东西
  • 是这样的,因为帧缓冲区包含每种颜色的 255 范围和单色光谱的 255 范围。您需要浮点数来支持更好的范围。
猜你喜欢
  • 2013-01-12
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2014-12-22
  • 2017-09-12
  • 2016-04-24
相关资源
最近更新 更多