【发布时间】:2012-01-16 23:23:56
【问题描述】:
当您从图像中检索轮廓时,每个 blob 应该有 2 个轮廓 - 一个内部和一个外部。考虑下面的圆圈 - 由于圆圈是像素宽度大于 1 的线,因此您应该能够在图像中找到两个轮廓 - 一个来自圆圈的内部,一个来自外部。
使用 OpenCV,我想检索 INNER 轮廓。但是,当我使用 findContours() 时,我似乎只得到了外部轮廓。如何使用 OpenCV 检索 blob 的内部轮廓?
我使用的是 C++ API,而不是 C,因此只建议使用 C++ API 的函数。 (即 findContours () 而不是 cvFindContours ())
谢谢。
【问题讨论】:
-
好吧,我真的没有任何唯一代码。我只有一个从相机中取回的垫子。我在上面运行精明的边缘检测器,然后使用 findContours() 找到轮廓。找到的所有轮廓都存储在 vector
> 中。这基本上就是我所拥有的,所以我发布实际代码没有多大意义——它只是寻找轮廓的传统过程。 -
我对轮廓进行了一些研究,尽管我的兴趣只是外部轮廓。我尝试使用“drawContours()”为轮廓着色。这预示着一种层次结构。我使用的“drawContours()”样本没有为内部轮廓着色。我想在这里得到的是,您可能需要使用“findContours()”中的层次数组对它们进行排序。 (我没有发布答案的原因是我对这个层次结构的了解是有限的,我不想让你在这件事上感到困惑。我已经对这些做了一些测试,到目前为止我可以解释我的理解,如果您要求。)
-
感谢您的回答。如果可能的话,如果你能解释你迄今为止对层次结构的理解,我将不胜感激。谢谢。
-
外部和内部边界轮廓可以使用 CvSeq* 结构中的 h_next 和 v_next 指针访问,其中轮廓由 findContours() 函数存储。这是书中关于如何组织的链接(我总是只处理外部轮廓,因此没有任何工作代码可发布):books.google.co.in/…
-
我使用的是 C++ API 而不是 C,因此我没有使用 CvSeq。我正在使用 vector
>
标签: c++ image image-processing opencv shape