2

しきい値処理後にキャニーで処理されるカラーしきい値バイナリ画像で輪郭を検索する小さなプログラムを作成しましたが、どういうわけか、画像内のすべてのオブジェクトに対して常に2つの輪郭を見つけます。

検出された等高線が描かれている右下の画像では、2 つの等高線の間に少しオフセットがあり、最大の等高線が 2 回描画されていることがわかります。次の画像は、この画像の詳細ビューを示しています。

http://img831.imageshack.us/img831/3641/doubleframe2.png

ここでは、最大の等高線だけが 2 回描画されますが、等高線の 1 つおきにランダムに描画されます。オブジェクトごとに輪郭が 1 つだけ欲しいのですが、どうすればそれを実現できますか? :/

更新:

findContours メソッドによって埋められる輪郭ベクトルのサイズは 8 で、サイズは 4 にすべきです。

更新 2:これ

は kinect からの RGB 入力画像です 。

cv::cvtColor(in, out, CV_BGR2HSV);
cv::inRange(out,
            cv::Scalar(25, 131, 97),
            cv::Scalar(35, 220, 217),
            out);

その後、サイズ 1 の rect 要素を使用した浸食 + 膨張が続きます。

4

1 に答える 1

5

エッジを見つけてからそれらのエッジの輪郭を見つけると、外側の境界と内側の境界があるため、問題が発生する可能性が最も高いと思います。したがって、openCV は両方を輪郭として取り、描画します。

その面積を計算すると、約「3」の値の非常に小さな変化があります(たとえば、最大の正方形は、面積9105.5 と 9108.5の 2 つの輪郭を検出しました)。これは、前述の理由により発生する可能性が最も高いです。(そのため、区別が非常に困難です)

キャニーエッジを見つけずに輪郭を見つければ、問題を解決できます。つまり、しきい値処理された画像から輪郭を直接見つけます。より正確な回答が得られます。

最初のケース (キャニーの後) では 36 の輪郭が得られましたが、2 番目のケースでは 22 の輪郭しか得られませんでした。

試してみて、問題が解決することを願っています!!!

于 2012-07-13T14:19:32.750 に答える