Python drawContours 方法对应用的图像没有任何作用 (OpenCV)

Python drawContours method does not anything on the image applied (OpenCV)

我正在尝试在我的测试图像周围绘制轮廓。我在后台使用精明的边缘检测。

findContours 方法适用于我的图像,但是当我尝试对该图像执行 drawContours 方法时。它没有显示任何内容。

这是我试过的

import cv2
import numpy as np

image = cv2.imread('/path/to/image.jpg')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (11, 11), 0)
cv2.imshow("blurred", blurred)

canny = cv2.Canny(blurred, 30, 150)

(_, cnts, _) = cv2.findContours(canny.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

print "Contours in the image, %d" % (len(cnts))

shape = image.copy()
cv2.drawContours(shape.copy(), cnts, -1, (0, 255, 0), 2)
cv2.imshow("Edges", shape)

根据我从文档中收集到的信息,方法 drawContours 的第四个参数将用于指定要绘制的边缘的颜色。但它没有显示任何东西,而不是我期待的绿色边缘。

len(cnts) returns 我2个

这是我正在试用的图片

我使用的是 opencv 版本 3.0.0

相关SO question

EDIT:将 cv2.findContours() 的第三个参数更改为 cv2.CHAIN_APPROX_NONE 后,它仍然没有显示最终的绿色边缘(或任何颜色) matter) 在最终的 cv2.imshow("Edges", shape) 图像上。这是我从精明的边缘图像中得到的

您必须将代码的最后一行修改为:

您已经在 shape

中存储了 image 的副本
shape = image.copy()   

那你为什么又在cv2.drawContours()中使用shape.copy()

替换如下:

cv2.drawContours(shape, cnts, -1, (0, 255, 0), 2)
cv2.imshow("Edges", shape)

注意:您已经复制了一次图像,因此请使用它来绘制轮廓。您不必使用复制图像的复制版本。

结果如下: