RGB颜色由三个分量组成:红(0-255)、绿(0-255)和蓝(0-255)。
什么是BGR颜色空间?它与RGB颜色空间有何不同?
BGR颜色空间是RGB颜色空间的变体,其中颜色通道的顺序被反转为蓝色、绿色和红色。在计算机视觉中,使用BGR颜色空间比RGB更常见,因为它与OpenCV等许多计算机视觉库兼容。
RGB颜色由三个分量组成:红(0-255)、绿(0-255)和蓝(0-255)。
什么是BGR颜色空间?它与RGB颜色空间有何不同?
这篇内容涉及字节序。
RGB是一个字节顺序。但大多数基本图形库的实现选择是将颜色在内部作为无符号32位整数处理,并将三个(或四个,因为通常包括alpha)组件打包到整数中。
在小端机器上(如x86),整数0x01020304实际上会被存储在内存中为0x04030201。因此,0x00BBGGRR将被存储为0xRRGGBB00!
因此,BGR(以及BGRA等)是一个有泄漏的抽象概念,其中图形库解释了整数的逻辑顺序,以使直接访问颜色组件的代码更易读。
请记住,位图通常由比您的处理器更多的硬件部分访问,并且由常规显示适配器指定的字节序不一定与您的CPU的字节序相同。在操作像素通道的级别上,CPU提取字段无论其顺序如何都不会出问题;这只是程序员理解标记的事情。
RGB代表红绿蓝。通常情况下,RGB颜色以结构体或无符号整数的形式存储,其中蓝色占据最低的“区域”(在32位和24位格式中是一个字节),绿色第二低,红色第三低。
BGR也是一样的,只不过区域的顺序被颠倒了。红色占据最低位,绿色仍然是第二位,而蓝色是第三位。
在某些平台上(例如Gamegear),会使用BGR模型。但是通常情况下,RGB可能会被使用(尽管为了兼容性,许多图形API支持BGR)。我不确定为什么会使用它,可能是由于历史原因。
示例:#FF0000在读作RGB十六进制颜色(#rrggbb)时是纯红色,因为第三个区域(数字从右向左读取!)是FF(最大值,全彩色),其他两个区域都是00(最小值,无颜色)。如果将#FF0000读作BGR十六进制颜色,那么这将是纯蓝色。
这只是RGB的更严格控制顺序,与字节序无关。一旦您知道环境的字节序,它们之间的转换就很简单。
BGR是24位表示法,其中低地址的8位为蓝色,下一个地址的8位为绿色,高地址的8位为红色。
RGB值通常被写成RGB(r,g,b),其中r/g/b值在0到255之间(包括0和255),或者写成#rrggbb,其中rr/gg/bb是8位十六进制值。我见过的所有BGR值都是简单的整数,介于0
和16777215
(0xffffff
)之间。