使用openCV检测颜色空间

ane*_*yzm 38 opencv space colors

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

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

谢谢

rcv*_*rcv 19

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

  • 再一次,没有实际显示图像就没有办法告诉我,但我认为RGB是一个非常安全的假设 - 这是大多数人在谈论三通道色彩空间时所想到的.如果还有别的什么,我会很惊讶. (2认同)

小智 6

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


Sco*_*e T 5

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

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