OpenCV findContours总是为每个对象找到两个轮廓

时间:2012-07-13 11:20:21

标签: c++ opencv

我刚刚编写了一个小程序,用于搜索颜色阈值化二进制图像中的轮廓,该图像在阈值处理后使用canny处理,但不知何故,它总是为图像中的每个对象找到两个轮廓。

在右下方的图像中,绘制了所找到的轮廓,您可以看到最大的轮廓被绘制两次,两个轮廓之间有一点偏移。下图显示了该图像的详细视图。

http://img831.imageshack.us/img831/3641/doubleframe2.png

这里只绘制了两次最大的轮廓,但是对于每个其他轮廓,它会随机出现。 我只想为每个物体画一个轮廓,我怎么能实现呢? :/

更新

由findContours方法填充的轮廓矢量的大小为8,其大小应为4。

更新2:

这是来自kinect的rgb输入图像 http://img405.imageshack.us/img405/9761/inputimage.jpg 对于颜色阈值我使用以下方法

cv::cvtColor(in, out, CV_BGR2HSV);
cv::inRange(out,
            cv::Scalar(25, 131, 97),
            cv::Scalar(35, 220, 217),
            out);

然后使用尺寸为1的rect元素进行侵蚀+扩张。

1 个答案:

答案 0 :(得分:4)

我认为问题很可能是因为当您找到边缘然后找到这些边缘的轮廓时,会有一个外边界和内边界。因此openCV将两者作为轮廓并绘制它。

当我计算其面积时,它们在'3'附近的值发生微小变化(例如,最大正方形检测到两个轮廓,区域 9105.5和9108.5 ),由于我提到的原因,最有可能发生。 (所以很难区分)

如果您发现没有找到精简边缘的轮廓,问题就可以解决了。即从阈值图像直接找到轮廓。它会给你更准确的答案。

在第一种情况下(在精灵之后),我有36个轮廓,而在第二种情况下,我只有22个轮廓。

尝试并希望它解决问题!!!