1

我想重现此处找到的有关连接组件的示例(代码不再在线,我想使用 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 是外轮廓)。

有人可以解释这与 doc有何关系CV_RETR_CCOMP

4

0 回答 0