Подтвердить что ты не робот

Что такое цветовое пространство BGR?

Цвет RGB состоит из трех компонентов: красного (0-255), зеленого (0-255) и синего (0-255).

Что такое цветовое пространство BGR? Чем он отличается от цветового пространства RGB?

4b9b3361

Ответ 1

RGB расшифровывается как Red Green Blue. Чаще всего цвет RGB хранится в виде структуры или целого числа без знака, где синий занимает наименее значимую "область" (байт в 32-битном и 24-битном форматах), зеленый - второй, а красный - третий.

BGR такой же, за исключением того, что порядок областей обратный. Красный занимает наименее значимую область, зеленый - второй (все еще), а синий - третий.

На некоторых платформах (например, Gamegear) используется модель BGR. Однако часто можно использовать RGB (хотя BGR поддерживается многими графическими API для совместимости). Я не уверен, почему именно это используется; вероятно, исторический.

Пример: # FF0000 имеет чистый красный цвет при чтении как шестнадцатеричный цвет RGB (#rrggbb), потому что третья область (числа читаются справа налево!) - это FF (максимальное значение, полный цвет), а две другие области равны 00 (минимум) значение, без цвета). Если бы # FF0000 читался как шестнадцатеричный цвет BGR, он был бы чисто синим.

Ответ 2

О его суждении.

RGB является байтовым порядком. Но преднамеренный выбор реализации большинства графических библиотек Vanilla заключается в том, что они обрабатывают цвета как неподписанные 32-битные целые числа внутри, причем три (или четыре, как обычно, включены) компоненты, упакованные в целое число.

На малой машине (например, x86) целое число 0x01020304 будет фактически сохранено в памяти как 0x04030201. И таким образом 0x00BBGGRR будет сохранен как 0xRRGGBB00!

Таким образом, термин BGR (и BGRA и т.д.) представляет собой пропущенную абстракцию, где графическая библиотека объясняет, как целое число логически упорядочивается, чтобы сделать ваш код, который напрямую обращается к цветным компонентам, более читабельным.

Помните, что к растровым изображениям обычно обращаются больше частей оборудования, чем ваш процессор, а конечный элемент, который указан, например, обычными адаптерами дисплея, не обязательно совпадает с конечным элементом вашего процессора. На уровне манипулирования каналами в пикселе нет проблем для того, чтобы CPU извлекал поля независимо от их порядка; его чисто программист понимает предмет маркировки.

Ответ 3

Речь идет о том, как компоненты цвета расположены в памяти. Для BGR порядок - BGRBGRBGRBGR..., а для RGB - RGBRGBRGB... Для BGR - порядок по умолчанию для OpenCV, он выглядит следующим образом:

enter image description here (См. документацию OpenCV для Как матрица изображений хранится в памяти?)

Обратите внимание, что в других ответах упоминаются определенные цвета, имеющие наименьшее или наибольшее значение, но на самом деле это зависит от порядкового номера вашей машины. А порядок упаковки компонентов в неподписанном int, например, зависит от вашего программного обеспечения или используемой вами библиотеки. Однако, независимо от вашей библиотеки или порядкового номера вашей машины, для пикселя BGR адрес байта компонента цвета B будет на один меньше, чем для G, и на два меньше, чем для R (а для RGB это наоборот).).

Ответ 4

Это просто RGB в более жестко контролируемом порядке, независимо от энтианности. Преобразование между ними просто, как только вы знаете, в чем смысл вашей среды.

BGR - это 24-битное представление, в котором 8 бит с нижним адресом являются синими, следующее-адресованное 8 - зеленым, а адреса 8 с более высоким адресом - красными.

Значения RGB, как правило, записываются как RGB (r, g, b), где значения r/g/b находятся между 0 и 255 включительно или как #rrggbb, где rr/gg/bb являются 8-разрядными шестнадцатеричными значениями. Все значения BGR, которые я видел, как правило, являются простыми целыми числами между 0 и 16777215 (0xffffff).