ここで見つかった接続コンポーネントに関する例を再現したかった(コードはオンラインではなくなったため、C++ API を使用したかった)。
への次の呼び出しを使用しましたfindCountours
。
findContours(img, contours, hierarchy, CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);
img は、記事で提案されている画像をしきい値処理することによって取得されます。
入力画像 http://img8.imageshack.us/img8/7249/78825396.png
予想される出力は次のとおりです。
出力画像 http://img8.imageshack.us/img8/5142/resultw.png
の説明からCV_RETR_CCOMP
、結果画像の 6 色に対応する 6 つのトップレベルの輪郭があると予想していました。
ドキュメントでは、接続されたコンポーネントは最上位にあり、穴は接続されたコンポーネント(CC)の子であると述べています。
しかし、 の調査からhierarchy
、最初の 3 つの等高線 (0、1、3) には親も子もないことがわかります。それらは「a」文字の穴に対応しています。他の等高線は階層にあります (最後のダンプを参照してください)。Contours 3 は、すべての画像を含む「トップレベル」の CC です。他の等高線は、予想される CC の外側の等高線です。
Contour 0: next: 1, previous: -1, child: -1, parent: -1, size: 4
Contour 1: next: 2, previous: 0, child: -1, parent: -1, size: 4
Contour 2: next: 3, previous: 1, child: -1, parent: -1, size: 4
Contour 3: next: -1, previous: 2, child: 4, parent: -1, size: 4
Contour 4: next: 5, previous: -1, child: -1, parent: 3, size: 121
Contour 5: next: 6, previous: 4, child: -1, parent: 3, size: 80
Contour 6: next: 7, previous: 5, child: -1, parent: 3, size: 18
Contour 7: next: 8, previous: 6, child: -1, parent: 3, size: 18
Contour 8: next: 9, previous: 7, child: -1, parent: 3, size: 18
Contour 9: next: -1, previous: 8, child: -1, parent: 3, size: 8
OpenCV 2.2 および 2.3.1 でコードをテストしました。より単純な画像 (穴のある円) でテストしたところ、同じ結果が得られました (3 つの輪郭: 0 は穴、1 はトップレベル、2 は外側の輪郭)。
これがのドキュメントにどのように関連しているかを誰かが説明できますかCV_RETR_CCOMP
?