openCVで画像の色空間を確認するにはどうすればよいですか?
cvCvtColor()関数を使用して別のRGBに変換する前に、RGBであることを確認したいと思います。
ありがとう
残念ながら、OpenCV は IplImage 構造体の色空間に関して何の指示も提供しないため、IplImage をどこかからやみくもに拾った場合、それがどのようにエンコードされたかを知る方法はありません。さらに、画像を HSV と RGB のどちらとして解釈する必要があるかを明確に判断できるアルゴリズムはありません。これはすべて、マシンへの単なるバイトの集まりです (これを行う必要があります)。HSV か RGB か?)。この情報を追跡できるように、IplImages を別の構造体 (またはテンプレートを含む C++ クラス) でラップすることをお勧めします。本当に絶望的で、特定の種類の画像 (屋外のシーン、オフィス、顔など) だけを扱っている場合は、画像の統計を計算してみることができます (たとえば、自然な RGB 画像のヒストグラム統計を作成し、自然な HSV 画像)、画像がどちらの色空間に近いかを比較して、まったく未知の画像を分類しようとします。
txandiは興味深い点を示しています。OpenCVには、デフォルトで使用されるBGR色空間があります。これは、BチャネルとRチャネルが画像内で物理的に切り替えられることを除いて、RGB色空間に似ています。物理チャネルの順序が重要な場合は、次の関数を使用して画像を変換する必要があります:cvCvtColor(defaultBGR、imageRGB、CV_BGR2RGB)。
rcvが言ったように、3 つのカラー チャネルを調べてプログラムで色空間を検出する方法はありません。ただし、画像の内容を先験的に知っている場合 (たとえば、画像内に色がわかっているマーカーがある場合など) は除きます。不明なソースから画像を受け入れる場合は、ユーザーが画像の色空間を指定できるようにする必要があります。適切なデフォルトは、RGB を想定することです。
表示前にピクセルの色を変更し、OpenCV 以外のビューアを使用cvCvtColor(src,dst,CV_BGR2RGB)
している場合は、すべてのカラー フィルタの実行が終了してから使用する必要があります。ビューアに OpenCV を使用している場合、または画像をファイルに保存する場合は、画像が BGR カラー スペースであることを確認する必要があります。
IplImage 構造体colorModel
には、 4 文字で構成されるという名前のフィールドがあります。残念ながら、OpenCV はこのフィールドを無視します。ただし、このフィールドを使用して、さまざまなカラー モデルを追跡できます。