在OpenCV中无法将灰度图转换为BGR

8

以下是使用OpenCV中的cvCvtColor函数将灰度图像转换为RGB的简单代码片段。

input = cvLoadImage("test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
output = cvCreateImage(cvSize(input->width, input->height), 8, 3);
cvCvtColor(input, output, CV_GRAY2BGR);
cvSaveImage("output.jpg", output);

这里的test.jpg是一张灰度图像。

但是它似乎不能正常工作,因为生成的output.jpg即最终输出也是灰度图像,与输入图片本身相同。为什么会这样呢?

非常感谢您的任何帮助!提前致谢!


3
但似乎它没有正常工作,因为输出的最终结果output.jpg也是灰度图,与输入本身相同。为什么会这样?如果输入是灰度图像,那么输出也是灰度图像。这是合乎逻辑的。您期望看到彩色图像吗? - ArtemStorozhuk
但是我已经以灰度加载了图像,我想将其转换为RGB,就像我们有时将彩色图像转换为灰度一样。 - Koustav
3
您期望的结果是什么?是一个具有三个通道(RGB)而不是只有一个通道的图像吗?还是实际上是彩色版本的图像?(例如,之前是灰色的苹果现在变成了绿色) - Niko
1个回答

27

我认为你误解了cvCvtColor。 cvCvtColor(input, output, CV_GRAY2BGR); 会将单通道图像转换为三通道图像。但是,如果你查看图像,它仍然看起来像灰度图像,因为例如,灰色像素154已被转换为RGB(154,154,154)。

当你将彩色图像转换为灰度图像时,所有的颜色信息都会消失且不可恢复。因此,你不能真正将灰度图像变成可见的彩色图像,除非有额外的信息和相应的操作。


4
对于未来的读者而言,在OpenCV的C++版本中,cvCvtColor就是cvtColor - Rick Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接