2008-12-15 3 views
27

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

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

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

ответ

17

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

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

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

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

+13

«как ваш компьютер», вероятно, неверен - Windows использует BGR. – 2008-12-15 05:50:02

+9

Этот ответ неверный: см. 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-битными границами целого числа без знака (поэтому не имеет смысла использовать это для объяснения). – Bull 2014-09-09 00:57:35

2

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

36

Его около endianness.

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

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

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

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

4

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

enter image description here (смотрите документацию OpenCV для How the image matrix is stored in the memory?)

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

Смежные вопросы