Python opencv drawContours 不显示任何内容
我按照这个页面上的教程操作,但当我执行这一行代码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(),否则窗口只会显示一个灰色背景。根据这篇文章,这是因为waitKey()告诉程序开始处理WM_PAINT事件。
4 个回答
7
你需要做一些类似于下面的事情:
cv2.drawContours(im,contours,-1,(255,255,0),3)
cv2.imshow("Keypoints", im)
cv2.waitKey(0)
8
我也遇到过同样的问题。问题在于它显示出来了,但颜色太暗,我们的眼睛看不清。
解决办法是:把颜色从(0,255,0)(不知道为什么,我也用了这个颜色!)改成(128,255,0)(或者换成其他更亮的颜色)。
17
我也遇到过同样的问题。我觉得问题出在底层的图像是单通道的,而不是三通道的。所以,你需要设置颜色,使得第一个元素不为零,比如说可以设置成(255,0,0),这表示红色。