5

我正在研究在 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

4

2 回答 2

9

我相信问题出在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)

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

于 2015-07-19T01:02:01.220 回答
1

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

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

检查图像形状:

print(image.shape)
# (400, 300)    -> Error
# (400, 300, 3) -> Works
于 2020-06-12T13:52:19.180 回答