cv2.imshow() 函数打开一个总是说没有响应的窗口 - python opencv

Posted

技术标签:

【中文标题】cv2.imshow() 函数打开一个总是说没有响应的窗口 - python opencv【英文标题】:cv2.imshow() function is opening a window that always says not responding - python opencv 【发布时间】:2014-04-12 01:23:52 【问题描述】:

我正在尝试运行一个非常简单的程序。使用 python 的 opencv 库打开和显示 jpg 文件。最初一切正常,但现在它只是打开一个不显示图像但显示“没有响应”的窗口。我需要去任务管理器关闭它!

from numpy import *
import matplotlib as plt
import cv2

img = cv2.imread('amandapeet.jpg')
print img.shape

cv2.imshow('Amanda', img)

【问题讨论】:

***.com/questions/6116564/… 【参考方案1】:

在这个线程上没有任何帮助,所以我找到了解决方案。只需使用matplotlib 库来显示图像:

import cv2
from matplotlib import pyplot as plt
#import matplotlib as mpl
#mpl.rcParams['toolbar'] = 'None' # if you want to remove toolbar from bottom
img = cv2.imread('path/to/image.jpg')

plt.figure('Your Title')
plt.imshow(img)
#plt.axis('off') # if you want to remove coordinates
plt.show()

UPD:我安装了opencv-contrib-python 库而不是opencv-python,现在cv2.imshow() 函数按预期工作。

【讨论】:

【参考方案2】:

我发现我有一个断点

cv2.waitkey()

功能。删除它为我解决了问题

【讨论】:

请说明您对现有答案的要求。【参考方案3】:

对我有用的解决方案: 从内嵌图形切换到自动。它适用于 SpyderJupyter 笔记本。

更改 Spyder 设置: 转到 工具 > 首选项 > IPhyton 控制台 > 图形 > 后端:自动 (将后端从内联更改为自动)

更改笔记本设置: 输入命令:

%matplotlib 自动


我的案例的一些背景(对于那些可能快速判断的人)

它曾经工作正常:我可以打开一个图像,它会加载,它会响应(没有说“不响应”,可以关闭、聚焦等)然后我安装了一些包并运行了一些显然弄乱了某些设置的演示笔记本(Spyder 打开的文件也被重置)。

我尝试添加 waitKey(1)(以及 0、30、1000 等值)。至少,它使图像加载。但是图像框架是“无响应”:没有刷新、无法关闭、没有到达顶部等。必须使用 cv2.destroyAllWindows() 关闭。

请注意,在 waitKey 期间一切正常。我把它放在一个循环中,在同一个命名窗口中显示相同的图像并等待几秒钟。在循环期间一切正常。循环一结束,图像窗口就会“无响应”(这看起来像是 GUI 线程问题)。我尝试使用 cv2.startWindowThread(),但没有任何区别。

最后,从内联图形更改为自动使一切恢复正常。

【讨论】:

终于!命令%matplotlib auto 对我有用。我已经尝试了其他所有方法,但是在我按下一个键关闭窗口后,python 总是会崩溃。谢谢!【参考方案4】:

在添加以下代码行之前,我遇到了同样的错误。对于waitKey,您可以输入0以上的数字(即1、100及以上)。它作为窗口的延迟时间,以毫秒为单位。

----> cv2 waitKey(0) ----> cv2 destroyAllWindows()

【讨论】:

【参考方案5】:

cv2.imshow() 函数总是需要另外两个函数来加载和关闭图像。这两个函数是 cv2.waitKey() 和 cv2.destroyAllWindows()。在 cv2.waitKey() 函数中,您可以提供任何值来关闭图像并继续执行更多代码行。

    # 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()

希望您现在可以在单独的窗口中获取图像。

【讨论】:

【参考方案6】:

我也遇到了同样的问题。我正在使用以下代码在 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])

添加它确实关闭了图像窗口。再次运行该命令将创建一个新实例。如果您仍然遇到任何问题,希望您可以尝试。

【讨论】:

【参考方案7】:

这里的答案都不适用于 MacOS。以下作品:

只需添加cv2.waitKey(1) cv2.destroyAllWindows()之后。

例子:

import cv2
image = cv2.imread('my_image.jpg')
cv2.imshow('HSV image', hsv_image); cv2.waitKey(0); cv2.destroyAllWindows(); cv2.waitKey(1)

【讨论】:

这很有帮助!我花了一分钟才意识到 cv2 窗口打开时处于非活动状态,我必须先让窗口处于活动状态,然后钥匙才会关闭它。 这也适用于我!最初显示为没有响应的图像,现在它在按下键后关闭。我花了很长时间才找到你的解决方案。谢谢。【参考方案8】:

如果你使用过python notebooks,那么在基于Unix的系统中使用cv2.waitKey(0)和cv2.destroyallwindows()来运行opencv程序会有问题。

我有另一种方法可以防止冻结您的图像

步骤: - 从 python notebooks 复制代码并创建新的 filename.py 并粘贴它 - 打开终端 - cd 路径/到/文件 - 源激活虚拟环境 - python 文件名.py

这将直接从终端运行代码。希望这对您有所帮助。示例链接:https://youtu.be/8O-FW4Wm10s

【讨论】:

【参考方案9】:

我最近一直在使用 opencv 3.2 和 matplotlib,并且发现(通过注释行的反复试验)从 matplotlib 导入 pyplot 对 cv2.imshow() 函数有某种干扰。我不确定它为什么或如何真正起作用,但如果有人搜索此问题并遇到这个旧论坛,这可能会有所帮助。我正在努力寻找解决此干扰问题的方法

【讨论】:

我发现 cv2.imshow() 实际上并没有显示任何东西,除非我已经尝试使用 matplotlib 绘制一些东西,例如plt.plot(x, y)。我可以想象这样做会以某种方式配置图形后端,但还没有找到真正的原因。我在 iPython 会话中工作(不是 Jupyter 笔记本)。【参考方案10】:

你又漏了一行:

cv2.waitKey(0)

然后窗口会显示图像,直到您按下键盘上的任意键。或者你可以通过如下方式:

cv2.waitKey(1000)
cv2.destroyAllWindows()

在这里,窗口显示 1000 毫秒或 1 秒的图像。之后,窗口会自行消失。但在某些情况下,它不会。所以你可以使用 cv2.destroyAllWindows() 强行销毁它

请先阅读更多教程:http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html

【讨论】:

最初即使没有 cv2.waitKey(0) 也能正常工作。它出现在窗户上。但是现在它显示了窗口,但说它没有响应。在我添加了 cv2.waitKey(0) 之后,它在窗口中显示图像,但窗口仍然显示没有响应。尽管这一切都发生在许多次运行中 您使用哪个版本的 OpenCV?哪个操作系统? Windows 8 我认为是 opencv 的 2.4.6 版 请注意,按任意键将关闭窗口并退出程序(或显示下一个图像),但通过例如关闭窗口单击窗口的“x”不会结束程序或显示下一个图像。

以上是关于cv2.imshow() 函数打开一个总是说没有响应的窗口 - python opencv的主要内容,如果未能解决你的问题,请参考以下文章

cv2.imshow() 函数抛出断言错误

OpenCV 函数学习03-图像的显示(cv2.imshow)

为啥我用pycharm的cv2.imshow会报错,一直没有解决,要自闭了?

plt格式打开字的颜色不统一怎么办

Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

Python 3.6 + opencv 3.4 中imshow 函数报错