为什么OpenCV使用BGR颜色空间而不是RGB?

76

为什么OpenCV使用BGR颜色空间而不是RGB。我们都知道RGB是大多数计算机图形学的便捷颜色模型,人类视觉系统也与RGB颜色空间类似。那么OpenCV使用BGR颜色空间是否有原因呢?。


3
可能是BGR颜色空间的重复问题。 - Kate Gregory
1
在这里,您可以找到有关OpenCV为什么使用BGR颜色格式的信息。 - sturkmen
6
@KateGregory,它不是重复的问题。那个问题是一个“什么”,而这个问题是一个“为什么”。 - Ricardo Magalhães Cruz
1
人类的视觉系统根本不像 RGB 那样工作。 - Robin De Schepper
3个回答

87

OpenCV早期开发人员选择BGR颜色格式的原因可能是因为在当时,相机制造商和软件提供商中,BGR颜色格式很受欢迎。例如,在Windows中,使用COLORREF指定颜色值时,使用BGR格式0x00bbggrr。

BGR是出于历史原因做出的选择,现在我们必须接受它。换句话说,BGR是OpenCV中的累赘问题。


4
可以。我的理解是,您询问是否可以通过复制其他用户的评论来回答问题。 - sturkmen
17
那并没有解释为什么BGR一开始会受欢迎。 - nerdfever.com
2
Windows只能在小端机器上运行。0x00bbggrr在内存中以R、G、B的顺序存储。我认为OpenCV的选择是基于误解的。 - Cris Luengo
8
我的来源是 https://learnopencv.com/why-does-opencv-use-bgr-color-format。为什么OpenCV使用BGR颜色格式? 在计算机视觉中,像素的颜色通常由三个分量表示:红、绿和蓝(RGB)。然而,在OpenCV中,颜色以蓝、绿和红(BGR)的顺序存储。这是因为早期版本的OpenCV被设计用于与许多基于BGR格式的图像处理库进行交互。此外,对于某些特定的应用程序,如人脸检测和跟踪,BGR格式也可以提供更好的性能。 - Robin De Schepper
2
@eugenhu 这是彩色光谱上的顺序。 - Simon Chemnitz-Thomsen
显示剩余3条评论

14

OpenCV 读取图像时使用 BGR 格式(而不是 RGB),因为在 OpenCV 最初开发时,BGR 颜色格式在相机制造商和图像软件提供商中很受欢迎。红色通道被认为是最不重要的颜色通道之一,因此排在最后,很多位图使用 BGR 格式进行图像存储。但是,由于现在标准已经改变,大多数图像软件和相机使用 RGB 格式,因此,在程序中,最好在分析或操作任何图像之前将 BGR 图像转换为 RGB。


1
你有这方面的参考资料吗?据我所知,它一直都是RGB。 - Cris Luengo

6

这仍然没有解释为什么OpenCV将蓝色存储在第一个字节中。链接的问答专门讨论了存储x0bgr,以使红色成为第一个读取的字节。在小端机器上,x0bgr中红色在第一个字节,但OpenCV将蓝色存储在第一个字节中。 - Cris Luengo

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