web-dev-qa-db-ja.com

BGR色空間とは正確には何ですか?

RGBカラーは、赤(0〜255)、緑(0〜255)、青(0〜255)の3つのコンポーネントで構成されています。

BGR色空間とは正確には何ですか? RGB色空間とどう違うのですか?

36
user43076

RGBはRed Green Blueの略です。ほとんどの場合、RGBカラーは構造体または符号なし整数に格納され、青は最下位の「領域」(32ビットおよび24ビット形式のバイト)、緑は2番目、赤は3番目に占有されます。

BGRは同じですが、エリアの順序が逆になっています。赤は最も重要でない領域を占め、緑は2番目(まだ)、青は3番目です。

一部のプラットフォーム(例 Gamegear )では、BGRモデルが使用されます。ただし、RGBが使用されることがよくあります(ただし、BGRは互換性のために多くのグラフィックAPIでサポートされています)。 why正確に使用されているかわかりません。おそらく歴史的。

例:3番目の領域(数値は右から左に読み取られます)がFF(最大値、フルカラー)であり、他の2つの領域は00(最小)値、色なし)。 #FF0000がBGRヘックスカラーとして読み取られた場合、それは純粋な青になります。

23
strager

その約エンディアンネス

RGBはバイト順です。しかし、ほとんどのバニラグラフィックスライブラリの意図的な実装の選択は、3つの(またはアルファが通常含まれているので4)コンポーネントが整数にパックされた状態で、色を内部で符号なし32ビット整数として扱うことです。

リトルエンディアンマシン(x86など)では、整数0x01020304は実際には0x04030201としてメモリに格納されます。したがって、0x00BBGGRRは0xRRGGBB00として格納されます。

したがって、BGR(およびBGRAなど)という用語は、グラフィックライブラリが整数を論理的に順序付ける方法を説明するリークの多い抽象概念であり、カラーコンポーネントに直接アクセスするコードを個別に読みやすくしています。

ビットマップは通常、プロセッサよりもハードウェアの多くの部分からアクセスされ、たとえば、従来のディスプレイアダプタで指定されているエンディアンは、CPUのエンディアンと必ずしも同じではないことに注意してください。ピクセルのチャネルを操作するレベルでは、CPUがフィールドの順序に関係なくフィールドを抽出することは問題ありません。その純粋にプログラマーがラベル付けのことを理解しています。

39
Will

これは、カラーコンポーネントがメモリに配置される方法についてです。 BGRの場合、順序はBGRBGRBGRBGR ...、RGBの場合はRGBRGBRGB ...です。BGRの場合、OpenCVのデフォルトの順序は次のようになります。

enter image description here (OpenCVのドキュメントで イメージマトリックスをメモリに保存する方法)を参照してください

他の回答では、特定の色が最も重要でない、または最も重要であると言及していますが、実際にはマシンのエンディアンに依存しています。そして、unsigned int内のコンポーネントのパッキング順序は、たとえば、実際にはソフトウェアまたは使用しているライブラリに依存します。ただし、ライブラリやマシンのエンディアンに関係なく、BGRピクセルの場合、B色コンポーネントのバイトアドレスはGの場合は1未満、Rの場合は2未満になります(RGBの場合は、その逆です) )。

6
Bull

エンディアンに関係なく、より厳密に制御された順序のRGBです。環境のエンディアンがわかれば、それらの間の変換は簡単です。

BGRは24ビット表現であり、下位アドレス8ビットは青、次アドレス8は緑、上位アドレス8は赤です。

RGB値は、r/g/b値が0から255までの場合はRGB(r、g、b)として、またはrr/gg/bbが8ビットの16進値の場合は#rrggbbとして書き込まれる傾向があります。私が見たすべてのBGR値は0および167772150xffffff)。

2
paxdiablo