5

下の画像のOpenCVでfindcontours()関数を使用しようとしています。

findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0) );

このクエリを実行するとcontours.size()、18が返されるため、円ごとに2つの輪郭が表示されます。円の厚さは1ピクセルですが、2つの輪郭はどうですか?それは外側用と内側用ですか?もしそうなら、どうすればこの関数に各円の輪郭を1つだけ検出させることができますか?輪郭は、1ピクセルの厚さのピクセルの接続されたシーケンスとして定義されていると思いました。

18の輪郭があると言います!!

4

2 に答える 2

4

これは確認できませんが、この関数で使用されるアルゴリズムは、各関数の勾配を計算するのと同じことをしていると思います。これは、あなたが提案したように、外側の端と内側の端に輪郭が見つかることを意味します。これを確認するために、円が白で塗りつぶされた入力画像を使用してみることができます(内側の輪郭を削除します)

findContours関数でさまざまなパラメーターを使用してテストすることもできます

たとえば、CV_RETR_TREEの代わりにCV_RETR_EXTERNALを使用してみてください内側円は外側の円の中にネストされていると思います。これにより、外側の円のみが返されるようになります。

于 2012-07-02T23:49:33.780 に答える
0

あなたはすでにこれを理解しているかもしれませんが...

findContoursは白いオブジェクトのみを対象としているため、くり抜かれた円のそれぞれをバンドとして認識し、2つの輪郭を生成します。

最良の方法は、塗りつぶされた円で別の画像を作成し、その画像にfindContooursを適用することです。それはあなたが望むものをあなたに与えるでしょう。

于 2012-09-22T16:07:19.153 に答える