我正在研究在opencv python中查找和绘制轮廓的示例。 但是当我运行代码时,我看到的是一个没有绘制轮廓的黑暗窗口。我不知道我哪里出错了。 代码是:
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
答案 0 :(得分:6)
我认为问题出在drawContours
命令上。如当前所述,图像目标是image
和img
。您还尝试将彩色框绘制到单个通道的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)
这两个快速修复程序对我来说是一个类似的黑色正方形图像,背景为白色。
答案 1 :(得分:0)
只需确保image
是此处的3个频道:
img = cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
检查图像形状:
print(image.shape)
# (400, 300) -> Error
# (400, 300, 3) -> Works