Цветовое пространство BGR - PullRequest
34 голосов
/ 15 декабря 2008

Я понимаю RGB --- значение (0-255) Красный, (0-255) Зеленый, (0-255) Синий, чтобы сформировать цвет.

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

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

Ответы [ 4 ]

37 голосов
/ 16 декабря 2008

Это примерно порядковый номер .

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

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

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

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

21 голосов
/ 15 декабря 2008

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

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

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

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

5 голосов
/ 09 сентября 2014

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

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

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

2 голосов
/ 15 декабря 2008

Это просто 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...