我按照this page上的教程进行操作,但执行第cv2.drawContours(im,contours,-1,(0,255,0),3)
行似乎没有任何结果。我希望看到带有绿色轮廓的star.jpg,如教程中所示。这是我的代码:
import numpy as np
import cv2
im = cv2.imread('C:\Temp\ip\star.jpg')
print im.shape #check if the image is loaded correctly
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im,contours,-1,(0,255,0),3)
pass
没有错误消息。 star.jpg是上述网页中的明星。 我使用的是opencv 2.4.8和Python 2.7。
drawContours应该在我的屏幕上显示图像吗?如果是这样,我做错了什么?如果没有,我该如何显示图像?
由于
编辑:
添加以下行将显示图像:
cv2.imshow("window title", im)
cv2.waitKey()
需要waitKey(),否则窗口将显示灰色背景。根据{{3}},这是因为waitKey()告诉它开始处理WM_PAINT事件。
答案 0 :(得分:11)
我有同样的问题。我认为问题在于底层图像是1通道而不是3通道。因此,您需要设置颜色,使其在第一个元素中非零(例如(255,0,0))。
答案 1 :(得分:7)
我也有同样的问题。它显示的是,但我们的眼睛看得太黑了。 解: 改变颜色从(0,255,0)(出于一些奇怪的原因,我也给出完全相同的颜色!)到(128,255,0)(或更好的颜色)
答案 2 :(得分:7)
你必须做一些事情:
cv2.drawContours(im,contours,-1,(255,255,0),3)
cv2.imshow("Keypoints", im)
cv2.waitKey(0)
答案 3 :(得分:0)
我想您的原始图像在灰度平面内。由于您的位平面是灰色而不是BGR,因此轮廓不会显示。因为它是黑色和灰色,您无法区分。这是简单的解决方案[通过转换位平面]:
im=cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
cv2.drawContours(im,contours,-1,(0,255,0),3)