colors - lyrics - Espacio de color BGR
polygondwanaland canciones (4)
Entiendo RGB --- value (0-255) Red, (0-255) Green, (0-255) Blue para formar un color.
¿Qué es exactamente el espacio de color BGR?
¿En qué se diferencia del espacio de color RGB?
Es sobre endianness .
RGB es un orden de bytes. Pero una elección de implementación deliberada de la mayoría de las librerías Gráficas de vanilla es que tratan los colores como enteros de 32 bits sin signo de forma interna, con los tres (o cuatro, como se incluye típicamente alfa) componentes empaquetados en el entero.
En una máquina little-endian (como x86), el entero 0x01020304 se almacenará en la memoria como 0x04030201. ¡Y así 0x00BBGGRR se almacenará como 0xRRGGBB00!
Entonces, el término BGR (y BGRA, etc.) es una abstracción con goteras donde la biblioteca de gráficos está explicando cómo el entero está ordenado lógicamente, para hacer que el código que está accediendo directamente a los componentes de color sea individualmente más legible.
Recuerde que a los bitmaps generalmente se accede por más partes del hardware que su procesador, y el endian que es especificado por, por ejemplo, los adaptadores de pantalla convencionales, no es necesariamente el mismo que el endian de su CPU. A nivel de manipulación de los canales en el píxel, no hay problema para que una CPU extraiga los campos cualquiera que sea su orden; es puramente un programador que entiende la cosa del etiquetado.
Es solo RGB en un orden más estrictamente controlado, independiente del endianness. La conversión entre ellos es simple una vez que conoces la endianidad de tu entorno.
El BGR es una representación de 24 bits donde los 8 bits con la dirección más baja son azules, los 8 siguientes con la dirección verde y los 8 con la dirección más alta son rojos.
Los valores RGB tienden a escribirse como RGB (r, g, b) donde los valores r / g / b están entre 0 y 255 inclusive o como #rrggbb, donde rr / gg / bb son valores hexadecimales de 8 bits. Todos los valores de BGR que he visto tienden a ser números enteros simples entre 0
y 16777215
( 0xffffff
).
RGB significa Rojo Verde Azul. Muy a menudo, un color RGB se almacena en una estructura o entero sin signo con el azul ocupando el "área" menos significativa (un byte en formatos de 32 bits y 24 bits), el verde el segundo menos y el rojo el tercero menos.
BGR es el mismo, excepto que el orden de las áreas se invierte. El rojo ocupa el área menos significativa, el verde el segundo (todavía) y el azul el tercero.
En algunas plataformas (por ejemplo, Gamegear ) se usa un modelo BGR. Sin embargo, para la mayoría, como su computadora, se usa RGB [citation-needed] (aunque BGR es compatible con muchas API gráficas por su compatibilidad). No estoy seguro de por qué exactamente se usa; probablemente histórico.
Ejemplo: # FF0000 es rojo puro cuando se lee como un color hexadecimal RGB (#rrggbb), porque la tercera área (¡los números se leen de derecha a izquierda!) Es FF (valor máximo, color completo) y las otras dos áreas son 00 (mínimo valor, sin color). Si # FF0000 se leen como un color hexadecimal BGR, sería azul puro.
Se trata de la forma en que los componentes de color se disponen en la memoria. Para BGR el orden es BGRBGRBGRBGR ..., y para RGB el orden es RGBRGBRGB ... Para BGR, el orden predeterminado para OpenCV, es como esto:
(Consulte la documentación de OpenCV sobre docs.opencv.org/doc/tutorials/core/how_to_scan_images/… )
Tenga en cuenta que las otras respuestas se refieren a que ciertos colores son los menos importantes o más importantes, pero eso depende de la endianidad de su máquina. Y el orden de empaquetado de los componentes en un int sin firmar, por ejemplo, realmente depende de su software o de la biblioteca que está utilizando. Sin embargo, independientemente de su biblioteca, o los endiannes de su máquina, para BGR pixel la dirección de bytes del componente de color B será una menos que para G y dos menos que para R (y para RGB, es al revés )