我正在尝试运行一个非常简单的程序。打开和jpg文件并使用python的opencv库显示它。起初一切都很好,但现在它只是打开了一个窗口,没有显示图像,但说"没有响应"。我需要去找任务经理并关闭它!
from numpy import *
import matplotlib as plt
import cv2
img = cv2.imread('amandapeet.jpg')
print img.shape
cv2.imshow('Amanda', img)
您又错过了一行:
cv2.waitKey(0)
然后窗口显示图像,直到您按下键盘上的任何键。或者您可以通过以下方式:
cv2.waitKey(1000)
cv2.destroyAllWindows()
这里,窗口显示1000毫秒或1秒的图像。在那之后,窗户就会自行消失。但在某些情况下,它不会。因此,您可以使用cv2.destroyAllWindows((强制销毁它
请先阅读更多教程:http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html
这里的答案在MacOS中都不起作用。以下工作:
只需在cv2.destroyAllWindows()
之后添加一个cv2.waitKey(1)
。
示例:
import cv2
image = cv2.imread('my_image.jpg')
cv2.imshow('HSV image', hsv_image); cv2.waitKey(0); cv2.destroyAllWindows(); cv2.waitKey(1)
对我有效的解决方案:从内联图形切换到自动。它在Spyder和Jupyter笔记本电脑中都有效。
- 要更改Spyder设置:转到工具首选项>IPhyton控制台>图形>后端:自动(将后端从内联更改为自动(
-
要更改笔记本设置:输入命令:
%matplotlib自动
我的案件的一些背景(对于那些可能很快做出判断的人(:
它过去工作得很好:我可以打开一个图像,它会加载,它会有响应(不要说"没有响应",可以关闭,聚焦等(。然后我安装了一些软件包,运行了一些演示笔记本,这些笔记本显然搞砸了一些设置(Spyder打开的文件也被重置了(。
我尝试添加waitKey(1((以及0、30、1000等值(。它至少使图像加载。但图像帧"没有响应":没有刷新,无法关闭,没有到达顶部,等等。必须使用cv2.destroyAllWindows((.关闭
请注意,在waitKey期间一切正常。我把它放在一个循环中,在相同的命名窗口中显示相同的图像,并等待几秒钟。在循环过程中,一切正常。循环一结束,图像窗口就会显示为"未响应"(看起来像是GUI线程问题(。我尝试使用cv2.startWindowThread((,但没有任何区别。
最后,从内联图形更改为自动使一切恢复正常。
我最近一直在使用opencv 3.2和matplotlib,并发现(通过注释行的反复尝试(从matplotllib导入pyplot对cv2.imshow((函数有某种干扰。我不知道它为什么或如何真正起作用,但如果有人搜索这个问题并发现这个旧论坛,这可能会有所帮助。我正在努力寻找一个解决方案来解决
我也遇到了同样的问题。我正在centos 7中运行命令行python提示符,代码如下
>> import cv2, numpy as np
>> cap=cv2.VideoCapture(0)
>> img=cap.read()
>> cap.release()
>> cv2.imshow('image',img[1])
>> cv2.waitKey(0)
>> cv2.destroyAllWindows()
>> cv2.waitKey(1)
即使在那时,问题仍然存在,而且没有解决。所以我添加了
>> cv2.imshow('image',img[1])
添加此操作确实关闭了图像窗口。再次运行该命令将创建一个新实例。如果你仍然面临任何问题,希望你能尝试一下。
cv2.imshow((函数总是需要另外两个函数来加载和关闭图像。这两个函数是cv2.waitKey((和cv2.destroyAllWindows((。在cv2.waikKey((函数中,您可以提供任何值来关闭图像并继续执行更多的代码行。
# First line will provide resizing ability to the window
cv.namedWindow('Amanda', cv.WINDOW_AUTOSIZE)
# Show the image, note that the name of the output window must be same
cv.imshow('Amanda', img)
# T0 load and hold the image
cv.waitKey(0)
# To close the window after the required kill value was provided
cv.destroyAllWindows()
希望你现在能在一个单独的窗口中获得图像。
我已经安装了opencv-contrib-python
库而不是opencv-python
,现在cv2.imshow()
功能可以正常工作。
如果您使用过python笔记本电脑,那么在基于Unix的系统中使用cv2.waitKey(0(和cv2.destroyalwindow((来运行opencv程序会出现问题。
我有一个替代方法,可以防止冻结你的图像
步骤:-从python笔记本复制代码,创建新的filename.py并粘贴-开路端子-cd路径/to/file-源激活VirtualEnvironment-python文件名.py
这将直接从终端运行代码。希望这对你有帮助。链接示例:https://youtu.be/8O-FW4Wm10s
在添加以下代码行之前,我也遇到了同样的错误。对于waitKey,您可以输入0以上的数字(即1100及以上(。它是窗口的延迟时间,以毫秒为单位。
---->cv2 waitKey(0(---->cv2 destroyAllWindows((
我发现上有一个断点
cv2.waitkey()
功能。删除它为我修复了的问题
当我尝试了上面提到的所有解决方案时,它适用于显示图像,但在我的情况下,我想显示视频,而不仅仅是窗口中的单个图像,所以为了解决这个问题,添加了
k=cv2.waitkey(10)
if k == 27:
break
cv2.imshow('title',img)
之后