Python opencv drawContours 不显示任何内容

15 投票
4 回答
33448 浏览
提问于 2025-04-17 20:33

我按照这个页面上的教程操作,但当我执行这一行代码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),这表示红色。

撰写回答