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)
注意:您已经复制了一次图像,因此请使用它来绘制轮廓。您不必使用复制图像的复制版本。
结果如下:
我正在尝试在我的测试图像周围绘制轮廓。我在后台使用精明的边缘检测。
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)
注意:您已经复制了一次图像,因此请使用它来绘制轮廓。您不必使用复制图像的复制版本。
结果如下: