C++ OpenCV findContours始终为每个对象查找两个轮廓
我刚刚写了一个小程序,在一个彩色阈值二值图像中搜索轮廓,这个二值图像在阈值化后用canny进行处理,但是它总是为图像中的每个对象找到两个轮廓 在绘制找到的轮廓的右下角图像中,可以看到最大轮廓绘制了两次,两个轮廓之间有一点偏移。下一幅图像显示了此图像的详细视图 这里只画了两次最大的轮廓,但每画一次轮廓都是随机的。 我只希望每个对象都有一个轮廓,我如何才能做到这一点/ 更新:C++ OpenCV findContours始终为每个对象查找两个轮廓,c++,opencv,C++,Opencv,我刚刚写了一个小程序,在一个彩色阈值二值图像中搜索轮廓,这个二值图像在阈值化后用canny进行处理,但是它总是为图像中的每个对象找到两个轮廓 在绘制找到的轮廓的右下角图像中,可以看到最大轮廓绘制了两次,两个轮廓之间有一点偏移。下一幅图像显示了此图像的详细视图 这里只画了两次最大的轮廓,但每画一次轮廓都是随机的。 我只希望每个对象都有一个轮廓,我如何才能做到这一点/ 更新: findContours方法填充的轮廓向量的大小为8,其中它的大小应仅为4 更新2:这是来自kinect的rgb输入图像
findContours方法填充的轮廓向量的大小为8,其中它的大小应仅为4 更新2:
这是来自kinect的rgb输入图像 对于颜色阈值,我使用了以下方法
cv::cvtColor(in, out, CV_BGR2HSV);
cv::inRange(out,
cv::Scalar(25, 131, 97),
cv::Scalar(35, 220, 217),
out);
然后是侵蚀+膨胀,矩形元素的大小为1。我认为问题最有可能是因为当你找到边,然后找到这些边的轮廓时,有一个外边界和内边界。所以openCV将两者都作为轮廓并绘制 当我计算其面积时,它们的值变化非常小,大约为'3'(例如,最大的正方形检测到两个面积分别为9105.5和9108.5)的等高线,这很可能是由于我提到的原因。(因此很难区分) 如果您找到轮廓而没有找到精明的边,则问题可以得到解决。ie直接从阈值图像中找到轮廓。它会给你更准确的答案 在第一种情况下(在canny之后),我得到了36个轮廓,而在第二种情况下,我只得到了22个轮廓
试试看,希望它能解决问题 请提供原始图像的链接。完成。我不得不删除程序的图像,因为我只能发布2个链接:/。为什么在找到轮廓之前你选择canny?为什么不直接在阈值图像上查找轮廓呢?另外,请检查您获得的轮廓数。我不知道我可以直接在阈值图像上使用findContours,现在效果好多了。谢谢!:)非常欢迎!如果它解决了您的问题,您可以接受答案并关闭此会话。