5

我正在尝试在下图中的 OpenCV 中使用findcontours()函数。

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

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

说有18个轮廓!!

4

2 回答 2

4

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

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

例如,尝试使用CV_RETR_EXTERNAL而不是CV_RETR_TREE我假设内圈嵌套在外圈内,所以这应该迫使它只返回外圈

于 2012-07-02T23:49:33.780 回答
0

你可能已经想通了,但是...

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

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

于 2012-09-22T16:07:19.153 回答