使用openCV检测颜色空间

时间:2010-01-23 09:27:55

标签: colors opencv space

如何使用openCV查看图像的色彩空间?

我想确定它是RGB,然后使用cvCvtColor()函数转换为另一个

感谢

5 个答案:

答案 0 :(得分:18)

不幸的是,OpenCV没有提供任何关于IplImage结构中颜色空间的指示,所以如果你盲目地从某个地方拿起IplImage,就无法知道它是如何被编码的。此外,没有算法可以明确地告诉您图像是否应该被解释为HSV与RGB - 它只是机器的一堆字节(this应该是HSV还是RGB?)。我建议你将IplImages包装在另一个结构(甚至包含模板的C ++类中)中,以帮助您跟踪这些信息。如果你真的很绝望而且你只处理某种类型的图像(室外场景,办公室,面孔等),你可以尝试计算你的图像的一些统计数据(例如,建立自然RGB图像的直方图统计数据和一些自然的HSV图像),然后尝试通过比较您的图像更接近的颜色空间来对您的完全未知的图像进行分类。

答案 1 :(得分:6)

txandi提出了一个有趣的观点。 OpenCV有一个BGR颜色空间,默认使用。这类似于RGB颜色空间,除了B和R通道在图像中物理切换。如果物理通道排序对您很重要,则需要使用以下功能转换图像:cvCvtColor(defaultBGR,imageRGB,CV_BGR2RGB)。

答案 2 :(得分:3)

IplImage struct有一个名为colorModel的字段,由4个字符组成。不幸的是,OpenCV忽略了这个领域。但您可以使用此字段来跟踪不同的颜色模型。

答案 3 :(得分:2)

正如rcv所述,没有方法可以通过检查三个颜色通道以编程方式检测颜色空间,除非您具有先验图像内容的知识(例如,有图像中的标记,其颜色已知)。如果您要接受来自未知来源的图像,则必须允许用户指定其图像的色彩空间。一个好的默认设置是假设RGB。

如果在显示之前修改任何像素颜色,并且您使用的是非OpenCV查看器,则在运行完所有颜色过滤器后,应该使用cvCvtColor(src,dst,CV_BGR2RGB)。如果您正在为查看器使用OpenCV,或者将图像保存到文件中,则应确保它们处于BGR色彩空间中。

答案 4 :(得分:0)

我基本上将频道分开并显示每个频道以找出我使用的图像的色彩空间。它可能不是最好的方式,但它对我有用。

有关详细说明,请参阅以下链接。

https://dryrungarage.wordpress.com/2018/03/11/image-processing-basics/