0

画像から固有の色を識別したい。を使用CvScalar loc = cvGet2D(img, i, j);し、場所が赤か緑かを確認するには を使用しますCvScalar red = CvScalar.RED;。ただし、画像に赤の色合いが含まれているため、ブール値の評価が true を返すことはありません。日陰を無視するように変更する方法、または変数CvScalarをいじる 方法はありますか?loc

4

2 に答える 2

0

OpenCV は画像を BGR 形式で保存するため、使用できる緑のチャネルloc.val(1)(2 番目のチャネル) の値を取得し、使用できる赤のチャネルを取得しますloc.val(2)。これらは [0, 255] の範囲の数値を返します。次に、赤と緑のチャネル ピクセル値を比較して、ピクセルがより赤か緑かを確認できます。

ただし、各ピクセルをループするよりも優れた (かつ高速な) アプローチは、次のようになります。

  1. を使用して、イメージを個別の赤と緑のチャネルに分割しますcvSplit
  2. cvCmp赤と緑のチャネルを比較して、赤のチャネルが緑のチャネルより大きいバイナリ イメージを生成するために使用します。
于 2013-02-11T22:26:43.177 に答える
0

赤いチャンネルのほんのわずかなビットがあなたの(バイナリ)質問を台無しにするからです:「それは緑ですか?」ここである種の「距離」を使用すると、より良い結果が得られる場合があります。

次のように、「見つかった」色と「望ましい」色のそれぞれの l2 ノルムを取ります。

sqrt( r*r + b*b + g*g );

差分をしきい値処理する(「十分に近い」かどうかを判断する)と、はるかにうまく機能する可能性があります

于 2013-02-11T22:45:57.997 に答える