Pergunta

Eu entendo RGB --- valor (0-255) Red, (0-255) Verde, (0-255) Azul para formar uma cor.

O que é exatamente BGR espaço de cor?

Como é que é diferente do espaço de cor RGB?

Foi útil?

Solução

RGB significa Red Green Blue. Na maioria das vezes, uma cor RGB é armazenado numa estrutura ou inteiro sem sinal com azul ocupando a "área" menos significativo (um byte em formatos de 32 bits e de 24 bits), verde a segunda menos, e vermelho do terceiro menos.

BGR é o mesmo, exceto a ordem das áreas é invertida. Red ocupa a área menos significativa, Verde a segunda (ainda), e azul o terceiro.

Em algumas plataformas é usada (por exemplo, o GameGear ) um modelo BGR. No entanto, para a maioria, como o computador, RGB é usado [-Carece de fontes?] (Embora BGR é suportado por muitos API gráfica é para compatibilidade). Eu não tenho certeza por exatamente ele é usado; provavelmente histórica.

Exemplo: # FF0000 é puro vermelho quando lido como uma cor hexadecimal RGB (#RRGGBB), porque a terceira área (números são lidos direita para a esquerda!) É FF (valor máximo, de cor completo) e as outras duas áreas são 00 (valor mínimo, sem cor). Se # FF0000 foram lidos como uma cor BGR hex, seria azul puro.

Outras dicas

Sua sobre endianness .

RGB é um byte-ordem. Mas a escolha de implementação deliberada da maioria das bibliotecas gráficas baunilha é que eles tratam as cores como inteiros de 32 bits sem sinal internamente, com os três (ou quatro, como alfa é normalmente incluído) componentes lotaram o número inteiro.

Em uma máquina little-endian (tal como x86) o inteiro 0x01020304 vai realmente ser armazenados na memória como 0x04030201. E assim 0x00BBGGRR será armazenado como 0xRRGGBB00!

Assim, o termo BGR (e BGRA etc) é uma abstração de fuga onde a biblioteca de gráficos é explicar como o inteiro é logicamente ordenada, de modo a tornar o código que está acessando diretamente os componentes de cor individualmente mais legível.

Lembre-se que bitmaps são geralmente acessado por mais partes do hardware do que o seu processador, eo endian que é especificado por, digamos, adaptadores de vídeo convencionais, não é necessariamente o mesmo que o endian de sua CPU. No nível de manipular os canais no pixel seu problema nenhum para uma CPU para extrair os campos independentemente da sua ordem; sua puramente um programador entender a coisa rotulagem.

É sobre a forma como os componentes de cor são definidos na memória. Para BGR a ordem é BGRBGRBGRBGR ... e para RGB a ordem é RGBRGBRGB ... Para BGR, a ordem padrão para OpenCV, é assim:

enter descrição da imagem aqui (Consulte a documentação OpenCV para Como a matriz de imagem é armazenada na memória? )

Observe as outras respostas têm se referido a certas cores sendo significado menos ou mais, mas isso realmente depende da ordenação da sua máquina. E a ordem de embalagem de componentes em um int não assinado, por exemplo, realmente depende do seu software, ou a biblioteca que você está usando. No entanto, independentemente da sua biblioteca, ou as extremidade de sua máquina, para Pixel BGR o endereço byte do componente B cor será um a menos do que para G e e dois a menos do que R (e para RGB é apenas o contrário ).

É apenas RGB em uma ordem mais rigidamente controlado, independente da ordenação. Convertendo entre eles é simples quando você sabe o endianness do seu ambiente.

O BGR é uma representação 24-bit, onde a parte inferior-endereçado 8 bits são azuis, o próximo endereçado 8 são verdes e superior-endereçado 8 são vermelhos.

valores RGB tendem a ser escrito como RGB (r, g, b) onde o r / g / b são valores entre 0 e 255, inclusive, ou como #rrggbb, em que o rr / gg / BB são valores hexadecimais de 8 bits. Todos os valores BGR que eu vi tendem a ser inteiros simples entre 0 e 16777215 (0xffffff).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top