javacv の cvScalar(double d, double d1, double d2, double d3) メソッドの 4 つのパラメータの意味を説明してください。
cvScalar で黒色を表現するにはどうすればよいですか?
cvScalar は、1、2、3、または 4 つの浮動小数点値の便利なコンテナーです。
そのようなタプルのデータの意味は、cvScalar のユーザーに任されています。
たとえば、平面内のポイント(2 タプル)、長方形(4 タプル)、RGB カラー(3 タプル)、3D ワールド内のポイント(3 タプル) などを保持するために使用できます。 cvScalar は、未使用の値が 0 に設定された 4 タプルとして体系的に実装されています。
RGB カラーの黒に関する質問に答えるには:
cvScalar cBlack = new cvScalar(0, 0, 0, 0);
// BEWARE: the params for the cvScalar constructor are not in RGB order
// it is: new cvScalar(blue, green, red, unused)
// note how the 4th scalar is unused.
または、次のように CV_RGB() 簡易メソッドを使用できます。
CvScalar cBlack = CV_RGB(0, 0, 0);
// here the CV_RGB() arguments are in Red, Green, Blue order.
編集: 上記の例はすべての色成分が同じ値を持つ黒色の例であるため、CvScalar 内に格納されている RGB 成分の順序が、従来の赤、緑、青の順序とは逆であることを明らかにできませんでした。
コンビニエンス メソッドのCV_RGB()
パラメータは従来の RGB 順ですが、cvScalar 内の格納は Blue、Green、Red の順です。
つまり、CV_RGB の定義は次のようになります。
public static CvScalar CV_RGB(double r, double g, double b) {
return cvScalar(b, g, r, 0);
}
または、別の言い方をすれば、 、つまり、赤にわずかに緑がかかった色cvScalar(0, 1, 130, 0)
と同等です。CV_RGB(130, 1, 0)
CV_RGB() に加えて、色値の目的で cvScalars を使用する場合cvScalar.Red()
、 , cvScalar.Blue()
,cvScalar.Green()
メソッドを使用して個々のコンポーネントを抽出すると、これらの保存場所を心配する必要がなくなり便利です。cvScalar.GRAY
このクラスには、cvScalar.YELLOW
、cvScalar.BLUE
などの一般的な色ごとにいくつかの静的インスタンスも含まれています 。
cvScalar は、4 つの double の汎用配列です。データ型は、多くの場合、ピクセル値を表すために使用されます。次に例を示します。
CvScalar blue = CV_RGB(64, 64, 255);
残りの double は、4 つ未満の値を取るコンストラクターで 0 に設定されます。
cvGet2D は、CvScalar の形式でピクセル値を返す別の関数です。
個々のピクセルを読み取る最も簡単な方法は、 cvGet2D() 関数を使用することです
CvScalar cvGet2D(const CvArr*, int 行, int 列);
この関数は、データ コンテナーへのポインター (CVArr*) と、行と列の位置の配列インデックスの 3 つのパラメーターを取ります。データ コンテナーは、IplImage 構造体にすることができます。ピクセルの一番上の行は row=0 で、一番下の行は row=height-1 です。
cvGet2D() 関数は、次のように定義された C 構造体 CvScalar を返します。
typedef struct CvScalar { double val[4]; } CvScalar;
各チャネルのピクセル値は val[i] にあります。グレースケール イメージの場合、val[0] にはピクセル >明るさが含まれます。他の 3 つの値は 0 に設定されます。3 チャネルの BGR 画像の場合、青 = val[0]、>緑 = val[1]、および赤 = val[2] です。
http://www.cognotics.com/opencv/servo_2007_series/part_1/page_4.html