我理解RGB ---值(0-255)红色,(0-255)绿色,(0-255)蓝色形成一种颜色.
究竟什么是BGR色彩空间?
它与RGB色彩空间有何不同?
它关于字节序.
RGB是字节顺序.但是大多数vanilla图形库的有意实现选择是它们在内部将颜色视为无符号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十六进制颜色,则它是纯蓝色.
它是关于颜色组件在内存中的布局方式.对于BGR,顺序是BGRBGRBGRBGR ...,对于RGB,顺序是RGBRGBRGB ...对于BGR,OpenCV的默认顺序,它是这样的:
(有关图像矩阵如何存储在内存中,请参阅OpenCV文档?)
请注意,其他答案提到某些颜色最少或最重要,但实际上这取决于您的机器的字节顺序.并且unsigned int中组件的打包顺序,例如,实际上取决于您的软件或您正在使用的库.但是,无论您的库或机器的endiannes,对于BGR像素,B颜色分量的字节地址将比G少一个,并且比R少两个(对于RGB,它只是相反的方式) ).