画像から固有の色を識別したい。を使用CvScalar loc = cvGet2D(img, i, j);
し、場所が赤か緑かを確認するには を使用しますCvScalar red = CvScalar.RED;
。ただし、画像に赤の色合いが含まれているため、ブール値の評価が true を返すことはありません。日陰を無視するように変更する方法、または変数CvScalar
をいじる 方法はありますか?loc
質問する
289 次
2 に答える
0
OpenCV は画像を BGR 形式で保存するため、使用できる緑のチャネルloc.val(1)
(2 番目のチャネル) の値を取得し、使用できる赤のチャネルを取得しますloc.val(2)
。これらは [0, 255] の範囲の数値を返します。次に、赤と緑のチャネル ピクセル値を比較して、ピクセルがより赤か緑かを確認できます。
ただし、各ピクセルをループするよりも優れた (かつ高速な) アプローチは、次のようになります。
- を使用して、イメージを個別の赤と緑のチャネルに分割します
cvSplit
。 cvCmp
赤と緑のチャネルを比較して、赤のチャネルが緑のチャネルより大きいバイナリ イメージを生成するために使用します。
于 2013-02-11T22:26:43.177 に答える
0
赤いチャンネルのほんのわずかなビットがあなたの(バイナリ)質問を台無しにするからです:「それは緑ですか?」ここである種の「距離」を使用すると、より良い結果が得られる場合があります。
次のように、「見つかった」色と「望ましい」色のそれぞれの l2 ノルムを取ります。
sqrt( r*r + b*b + g*g );
差分をしきい値処理する(「十分に近い」かどうかを判断する)と、はるかにうまく機能する可能性があります
于 2013-02-11T22:45:57.997 に答える