web-dev-qa-db-ja.com

CV_8UC3と他のタイプはOpenCVで何を表していますか?

OpenCVのドキュメントで、さまざまなタイプが何を表しているのか(言葉で)説明しているものが見つからなかったときは驚きましたが、グーグルもあまり役に立ちませんでした。 CV_8UC1がグレースケールであることは知っていますが、CV_8UC3は何の略ですか? RGBですか?またはYUV?

また、types_c.hからの他の定義についてはどうでしょう(コメントもありません)。命名規則のパターンはありますか?名前などから、色などの機能を解釈できますか?

#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))

#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))

#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))

#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))

#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))

#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
38
sashoalm

ドキュメント に記載されているように

リストのプリミティブ型は、CV_<bit-depth>{U|S|F}C(<number_of_channels>)という形式の識別子で定義できます

ここで、Uは符号なし整数型、Sは符号付き整数型、Fは浮動小数点型です。

そう CV_8UC3は、3チャネルの8ビット符号なし整数マトリックス/イメージです。これがRGB(または実際にはBGR)イメージを意味することは最も一般的ですが、それは必須ではありません。それは単に3つのチャネルがあることを意味し、それらの使用方法はユーザーとアプリケーション次第です。

51
Hannes Ovrén

命名パターンは、データがPCメモリで実際にどのようにレイアウトされるかを示しており、画像タイプに直接関係していません。実際、データレイアウトと画像タイプは分離されています。

おそらく、CV_XXパターンの意味(つまり、data layout)を見つけたでしょう。

画像化されたデータ型の場合、OpenCVに画像をカラー画像としてロードするように要求すると、[〜#〜] bgr [〜#〜]イメージとそのデータをCV_8UC3としてレイアウトします。知っておくべきいくつかのこと:

  • はい、デフォルトのチャネルの順序は[〜#〜] bgr [〜#〜]であり、[〜#ではありません〜] rgb [〜#〜]。 OpenCV 1.xxの開発中は、Webカメラからのデジタルビデオフィードがこの順序に従うように思われたため、これはレガシーな順序です。
  • モジュールimgprocの型変換関数、つまりcv::cvtColor()を使用できます。ただし、すべてのデータレイアウトと画像タイプには互換性がありません。 doc ;を確認してください。
  • 通常、アルファチャネルは無視されます。無視するということは、cv::imwrite()が例えばアルファなしの3チャンネル画像を書き込むことを意味します。ほとんどの処理機能は、単一のチャンネル画像に固有であるか、すべてのチャンネルに同じ処理を等しく適用します。
  • 関数が(アルファ)マスクを受け入れる場合、それは通常、タイプCV_8UC1これはデフォルトで空の行列になります。
13
sansuiso

8UC3は、RGBデータへのアクセスに役立ちます。また、画像だけに限定されません。これを使用して、ポイントクラウドのRGBデータにアクセスすることもできます。 RGB値をタイプ8UC3のマトリックスとして渡すと、この値をvizモジュールで色として表示し、RGBポイントクラウドを表示できます。

1
Giant Cloud