OpenCV findcontours为每个圆返回2个轮廓

时间:2012-07-02 23:39:15

标签: c++ image-processing opencv computer-vision

我正在尝试在OpenCV中使用findcontours()函数,如下图所示。

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

当我执行此查询时:contours.size()它返回18,因此每个圆圈似乎有2个轮廓。你可以看到1个像素厚的圆圈,2个轮廓怎么样?它是一个用于外部,一个用于内部,如果是这样,我如何强制此功能仅检测每个圆的一个轮廓?我认为轮廓被定义为连接的像素序列,1像素厚。

Says there are 18 contours!!

2 个答案:

答案 0 :(得分:4)

我无法证实这一点,但我认为此函数使用的算法与计算每个函数的渐变相当。这意味着在外边缘和内边缘上会有一个轮廓,就像你建议的那样。 要确认这一点,您可以尝试使用输入图像,其中圆圈已用白色填充(消除内部轮廓)

您还可以使用findContours函数

上的不同参数进行测试

例如,尝试使用 CV_RETR_EXTERNAL 而不是 CV_RETR_TREE 我假设内圈嵌套在外圈中,所以这应该强制它只返回外圈< / p>

答案 1 :(得分:0)

你可能已经想到了这个但是......

findContours仅关注白色物体,因此将每个空心圆圈识别为一条带,从而产生两个轮廓。

最好的方法是使用实​​心圆圈创建另一个图像,并为该图像应用findContoours。它会给你你想要的东西。