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

dr_*_*_rk 5 c++ opencv image-processing 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像素厚.

说有18个轮廓!!

Nap*_*s62 4

我无法确认这一点,但我认为该函数使用的算法相当于计算每个函数的梯度。这意味着将在外边缘找到一个轮廓,在内边缘找到一个轮廓,就像您所建议的那样。为了确认这一点,您可以尝试使用圆圈已填充白色的输入图像(消除内部轮廓)

您还可以在 findContours 函数上使用不同的参数进行测试

例如,尝试使用CV_RETR_EXTERNAL而不是CV_RETR_TREE我假设内圆嵌套在外圆内,因此这应该强制它仅返回外圆