1

オブジェクト内の白い形状を検出しようとしていますが、1 つのビデオに対して正常に検出できます。

// Create and display a new matrix for triangles
triangles = src.clone();
GaussianBlur(triangles, triangles, Size(5, 5), 0, 0);
inRange(triangles, Scalar(150,150,150), Scalar(255, 255, 255), triangles);
imshow("triangles", triangles);

これで結果が得られます

http://s8.postimg.org/o9xg284jp/triangles.png

ただし、別のビデオを使用する場合、スカラー値 150 は適切ではない可能性があります (たとえば、明るい環境の場合... すべてが検出されます)。

http://s8.postimg.org/m09brgvlx/bad_triangles.png

このビデオでは、最小スカラーを約 190 ~ 200 に変更して、適切に機能させる必要があります。私の質問 - 使用する正しいスカラー値を決定する良い方法はありますか? 簡単に聞こえる人もいると思いますが、そのせいで頭が痛くなりました!

4

2 に答える 2

2

http://colorizer.org/

ここにチェックを入れると、問題が何であるかがわかります。RGB = (255, 155, 155) はおそらく「白」ではありませんが、inRange メソッドはその白に真の出力を与えています。

HSL 色空間を使用してみてください。明度 > 90 は、H および S チャンネルの値に関係なく、確実に白です。BGR2HLS 変換を使用します。次に、90 ~ 100 の間の L チャネルで inRange を使用します。

実際、色検出の問題では、RGB ではなく HSV と HSL が主に使用されます。

于 2013-07-19T18:45:31.760 に答える