首页 文章

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

提问于
浏览
1

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

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

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

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

Update:

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

update 2:

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

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

然后用尺寸为1的矩形元素进行侵蚀扩张 .

1 回答

  • 4

    我认为问题很可能是因为当你找到边缘然后找到那些边缘的轮廓时, there is an outer boundary and inner boundary for it . 因此openCV将两者作为轮廓并绘制它 .

    当我计算它的面积时,它们的值有一个非常小的变化 '3' (例如,最大的正方形检测到两个面积为 9105.5 and 9108.5 的轮廓),这很可能是由于我提到的原因而发生的 . (所以他们很难区分)

    The problem can be solved if you find contours with out finding canny edges . 即从阈值图像中直接找到轮廓 . 它会给你更准确的答案 .

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

    试试吧,希望它能解决问题!

相关问题