DrawContours() 不工作 opencv python

DrawContours() not working opencv python

我正在研究在 opencv 中查找和绘制轮廓的示例 python。 但是当我 运行 代码时,我只看到一个没有绘制轮廓的黑暗 window。我不知道我哪里错了。 代码是:

import numpy as np
import cv2
im = cv2.imread('test.png')
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =     cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img=cv2.drawContours(image,contours,0,(0,255,0),3)
cv2.imshow('draw contours',img)
cv2.waitKey(0)

test.png 只是一个黑色背景的白色矩形。

如有任何帮助,我们将不胜感激。

编辑: 我正在使用 Opencv 3.0.0 和 Python 2.7

我认为问题出在 drawContours 命令上。正如目前所写,图像目标是 imageimg。您还试图在单通道 8 位图像上绘制彩色框。另外,值得注意的是findContours函数在寻找轮廓的过程中实际上修改了输入图像,因此最好不要在后面的代码中使用该图像。

如果您打算对图像进行进一步分析,我还建议您创建一个新的图像副本以设置为 drawContours 函数的目标,这样您就不会覆盖您的唯一副本程序当前可以访问。

import numpy as np
import cv2

im = cv2.imread('test.png')
imCopy = im.copy()
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =  cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(imCopy,contours,-1,(0,255,0))
cv2.imshow('draw contours',imCopy)
cv2.waitKey(0)

这两个快速修复对我在白色背景的黑色方块的类似图像上有效。

只需确保 image 是 3 通道:

img = cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

检查图像形状:

print(image.shape)
# (400, 300)    -> Error
# (400, 300, 3) -> Works