我想重现有关已发现的连接组件here的示例(代码不再在线,我想使用C ++ API)。
我使用了以下对findCountours
的调用:
findContours(img, contours, hierarchy, CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);
其中img是通过对文章中提出的图像进行阈值处理获得的:
input image http://img8.imageshack.us/img8/7249/78825396.png
预期输出为:
output image http://img8.imageshack.us/img8/5142/resultw.png
根据CV_RETR_CCOMP
的描述,我希望有6个顶级轮廓,对应于结果图像的6种颜色。
它在文档中说连接组件是 在顶层,孔是连接组件(CC)的子项。
然而,从hierarchy
的探索中,我可以看到前三个轮廓(0,1,3)既没有父也没有孩子。它们对应于'a'字母中的孔。其他轮廓位于层次结构中(请参阅末尾的转储)。轮廓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
的文件有什么关系?