我遇到CV.drawContours问题。我在这里输入这张图片。
但是,输出会稍大一些,并会创建一些不属于图片的空间的轮廓。这是输出的样子
如您所见,沿着左侧和底部增加了面积,并绘制了轮廓线(绿色)。我正在关注本教程on OpenCV Contours,但是同时查看本教程和一些文档并不能使我很清楚这是什么问题。这是我的代码。
鉴于我们看到的是原始图片之外的绿线,我猜cv.findContours
发生了一些变化,并且它正在拾取其他可能的外部轮廓线,并考虑了原始图片中的黑色轮廓图片是内部轮廓线(尽管这不能解释为什么仅在侧面的一半上发生)。
import cv2 as cv
# Find contours
im = cv.imread("binary_graph_8.png")
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# Draw countours
cv.drawContours(im, contours, -1, (0, 255, 0), thickness=1)
#Issue - function shows more than 100% of entire image...2/17/2019
cv.imshow("window title", im)
cv.waitKey()
答案 0 :(得分:3)
答案 1 :(得分:1)
我最近在同一个问题上苦苦挣扎,发现的唯一解决方案是使用层次结构过滤获得的轮廓。当然,这是一种不好的解决方案,但对我有用。
在您的情况下,您应该仅预测两种可能的问题。
您在结果层次结构中具有此类区域。您可以肯定地说它们里面没有任何东西,因此只需忽略没有嵌套子级的第一级轮廓
您宣传的整个图像可能会嵌套成一个轮廓。然后使用层次结构将其提取出来不是问题。
总而言之,我宁愿编写几行代码来检查此选项,然后深入了解opencv的胆量。
我想,关于轮廓的层次结构的最佳教程是there