cv2.imshow命令在opencv-python中无法正常工作


111

我正在使用opencv 2.4.2,python 2.7下面的简单代码创建了一个正确名称的窗口,但其内容为空白,并且不显示图像:

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)

有谁知道这个问题吗?


您的文件路径可能错误。Windows使用\而不是/。我不确定Windows是否可以容忍OpenCV?如果无法解决问题,请确保图像位于正确的位置并且是有效的图像。
fmw42

有一个与阅读的基础/教程在显示图像docs.opencv.org/master/dc/d2e/tutorial_py_image_display.html
KON迷幻

Answers:


228

imshow()仅适用于waitKey()

import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()

(更新窗口所需的整个消息循环都隐藏在其中。)


3
check print img打印正确的numpy数组,而不是NoneType对象。
Abid Rahman K 2014年

7
为了清楚起见,通常情况下,这是正确的答案。省略waitKey(通常)将完全导致问题中描述的行为。
Snesticle 2015年

45

我在这里找到了最适合我的答案:http : //txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

如果您运行交互式ipython会话,并希望使用highgui窗口,请首先执行cv2.startWindowThread()。

详细而言:HighGUI是简化的界面,用于显示来自OpenCV代码的图像和视频。它应该像这样简单:

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)

7
之后,您可以通过cv2.destroyAllWindows()
Zuza 2015年

对于highgui的QT实现,startWindowThread()不执行任何操作。github.com/opencv/opencv/blob/...
哭死

24

您必须cv2.waitKey(0)在之后使用cv2.imshow("window",img)。只有这样,它才能起作用。

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

我要补充一点,您可能需要安装python IDE来显示图像,并且还应该查找有时它不在前面显示的窗口。我假设cv2.waitKey()中的括号是毫秒,如果您留空,它将永远显示该图像。
Ahmadiah '19

11

如果您在Python控制台中运行,请执行以下操作:

img = cv2.imread("yourimage.jpg")

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()

然后,如果您按Enter图像,它将成功关闭图像,您可以继续运行其他命令。


7

我遇到了同样的问题。我试图从IDLE中读取图像,并尝试使用显示它cv2.imshow(),但是显示窗口冻结,并且显示pythonw.exe在尝试关闭窗口时无响应。

下面的帖子给出了可能发生这种情况的可能解释

pythonw.exe没有响应

基本上,不要从IDLE中执行此操作。编写脚本并从shell或脚本(如果在Windows中)直接运行它,方法是使用.pyw扩展名命名并双击它。显然,IDLE自己的事件之间存在冲突循环和来自GUI工具包的循环。

当我imshow()在脚本中使用并执行它,而不是直接在IDLE上运行它时,它就起作用了。


请添加链接上提供的说明(至少要最少),因为链接可能会过时...谢谢:)
achedeuzot14年

碰到这是我遇到的问题,但是...“不要这样做”不是我要寻找的答案=)
Eric


4

对我来说,数字大于0的waitKey()有效

    cv2.waitKey(1)

3

您在此线程中的某处拥有了所有必要的部分:

if cv2.waitKey(): cv2.destroyAllWindows()

在IDLE中对我来说效果很好。


3

如果您没有使它起作用,那么最好放

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

成一个文件并运行它。


1

之后不需要任何其他方法waitKey(0)(回复上面的代码)

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
cv2.waitKey(0)

出现窗口->单击窗口,然后单击Enter。窗口将关闭。


0

如果选择使用“ cv2.waitKey(0)”,请确保已编写“ cv2.waitKey(0)”而不是“ cv2.waitkey(0)”,因为小写的“ k”也可能冻结程序。


3
API中不存在带有小写字母键的方法。由于该方法不存在,因此代码将引发错误。
rayryeng '19

0

我也遇到-215错误。我以为imshow是问题所在,但是当我将imread更改为读取不存在的文件时,那里没有错误。因此,我将图像文件放在工作文件夹中,并添加了cv2.waitKey(0)并成功运行。



-1

我遇到了相同的215错误,可以通过提供图像的完整路径来解决该错误,例如在C:\ Folder1 \ Folder2 \ filename.ext中


什么是“ 215错误相同”?在OP问题中没有任何地方提到任何错误。另外,OP正在使用图像的完整路径,因此我看不到这如何回答问题。
Max Vollmer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.