我正在尝试在OpenCV中使用findcontours()函数,如下图所示。
findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0) );
当我执行此查询时:contours.size()
它返回18,因此每个圆圈似乎有2个轮廓。你可以看到1个像素厚的圆圈,2个轮廓怎么样?它是一个用于外部,一个用于内部,如果是这样,我如何强制此功能仅检测每个圆的一个轮廓?我认为轮廓被定义为连接的像素序列,1像素厚。
答案 0 :(得分:4)
我无法证实这一点,但我认为此函数使用的算法与计算每个函数的渐变相当。这意味着在外边缘和内边缘上会有一个轮廓,就像你建议的那样。 要确认这一点,您可以尝试使用输入图像,其中圆圈已用白色填充(消除内部轮廓)
您还可以使用findContours函数
上的不同参数进行测试例如,尝试使用 CV_RETR_EXTERNAL 而不是 CV_RETR_TREE 我假设内圈嵌套在外圈中,所以这应该强制它只返回外圈< / p>
答案 1 :(得分:0)
你可能已经想到了这个但是......
findContours仅关注白色物体,因此将每个空心圆圈识别为一条带,从而产生两个轮廓。
最好的方法是使用实心圆圈创建另一个图像,并为该图像应用findContoours。它会给你你想要的东西。