DrawContours()在opencv python中不起作用

问题描述 投票:2回答:2

我正在使用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

python opencv opencv-contour
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)

这两个快速修复对我来说具有相似的白色背景黑色正方形图像。


0
投票

只需确保image在此处为3通道:

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

检查图像形状:

print(image.shape)
# (400, 300)    -> Error
# (400, 300, 3) -> Works
© www.soinside.com 2019 - 2024. All rights reserved.