当前位置:  开发笔记 > 前端 > 正文

BGR色彩空间

如何解决《BGR色彩空间》经验,为你挑选了3个好方法。

我理解RGB ---值(0-255)红色,(0-255)绿色,(0-255)蓝色形成一种颜色.

究竟什么是BGR色彩空间?

它与RGB色彩空间有何不同?



1> Will..:

它关于字节序.

RGB是字节顺序.但是大多数vanilla图形库的有意实现选择是它们在内部将颜色视为无符号32位整数,其中三个(或四个,通常包括alpha)组件被打包到整数中.

在小端机器(例如x86)上,整数0x01020304实际上将作为0x04030201存储在内存中.因此0x00BBGGRR将存储为0xRRGGBB00!

所以术语BGR(和BGRA等)是一个漏洞抽象,其中图形库解释整数是如何按逻辑排序的,以便使直接访问颜色组件的代码更具可读性.

请记住,位图通常由硬件的更多部分访问,而不是处理器,并且由传统显示适配器指定的字节序不一定与CPU的字节序相同.在操纵像素中的通道的级别上,CPU无论其顺序如何都可以提取字段; 它纯粹是程序员理解标签的东西.


我的理论:他们希望它们按波长增加的顺序.
我不相信它与字节序有任何关系.Gamegear使用BGR颜色,以及Wonderswan颜色,但Gameboy Color和Advance使用RGB颜色.所有都是little-endian系统(分别是Z80,基于80286,基于Z80和ARM).
http://dev.chromium.org/developers/design-documents/graphics-and-skia搜索"RGBA和BGRA的史诗般的战斗"

2> strager..:

RGB代表红绿蓝.大多数情况下,RGB颜色存储在结构或无符号整数中,其中蓝色占据最不重要的"区域"(32位和24位格式的字节),绿色是第二个,而红色是第三个.

BGR是相同的,除了区域的顺序是相反的.红色占据最不重要的区域,绿色占第二个(静止),蓝色占第三个.

在某些平台(例如Gamegear)上使用BGR模型.但是,对于大多数人来说,就像你的计算机一样,使用了RGB [需要引用](尽管许多图形API支持BGR以实现兼容性).我不确定为什么要使用它; 可能是历史的

示例:#FF0000在读取为RGB十六进制颜色(#rrggbb)时为纯红色,因为第三个区域(数字从右向左读取!)为FF(最大值,全彩色),其他两个区域为00(最小值)价值,没有颜色).如果#FF0000被读作BGR十六进制颜色,则它是纯蓝色.


答案不正确:请参阅http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html#how-the-image-matrix-is-stored-in-the-memory.OpenCV的约定是BGR,B存储在比R低的字节地址.B或R是否最低有效取决于机器的字节顺序,还有24位BGR像素未对齐到32位边界无符号整数(因此用它来解释时没有多大意义).

3> Bull..:

它是关于颜色组件在内存中的布局方式.对于BGR,顺序是BGRBGRBGRBGR ...,对于RGB,顺序是RGBRGBRGB ...对于BGR,OpenCV的默认顺序,它是这样的:

在此输入图像描述 (有关图像矩阵如何存储在内存中,请参阅OpenCV文档?)

请注意,其他答案提到某些颜色最少或最重要,但实际上这取决于您的机器的字节顺序.并且unsigned int中组件的打包顺序,例如,实际上取决于您的软件或您正在使用的库.但是,无论您的库或机器的endiannes,对于BGR像素,B颜色分量的字节地址将比G少一个,并且比R少两个(对于RGB,它只是相反的方式) ).

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有