Python OpenCV - waitKey(0)没有响应?

时间:2013-12-12 09:24:54

标签: python opencv ubuntu-12.04

我在ubuntu 12.04上使用opencv 2.4.7。我正在用python编程,当我运行这个脚本时我遇到了问题:

import cv2

img = cv2.imread('347620923614738322_233985812.jpg')
cv2.namedWindow("window")
cv2.imshow("window", img)
cv2.waitKey(0)

问题是当我关闭图像时脚本不会停止。我搜索了有关waitKey的信息,发现使用cv2.waitKey(0)是正确的。

我不明白,问题出在哪里?

12 个答案:

答案 0 :(得分:28)

我发现如果我在窗口聚焦时按键,它会起作用。如果命令行处于焦点,那么没有任何反应

答案 1 :(得分:10)

在销毁窗口后添加cv2.waitKey(1)应该适用于这种情况。

cv2.imshow('imgae',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

答案 2 :(得分:7)

此代码适用于IDLE:

# -*- coding: utf-8 -*-

# Objectif : découvrir le fonctionnement d'opencv-python
# http://opencv-python-tutroals.readthedocs.org/en/latest/index.html


import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('Lena.tiff',0)
WINDOW_NAME = 'Image de Lena'
cv2.namedWindow(WINDOW_NAME, cv2.CV_WINDOW_AUTOSIZE)
cv2.startWindowThread()

# Display an image
cv2.imshow(WINDOW_NAME,img)
cv2.waitKey(0) 


cv2.destroyAllWindows()

希望这有助于未来的读者。

答案 3 :(得分:1)

尝试直接执行脚本从终端100%为我但不是从IDE 执行,我解释说: 我正在使用fedora 20并遇到同样的问题,从正式的opencv python教程中复制第一个例子,我正在使用:

  • Fedora 20 64bit
  • Spyder IDE for python
  • Python版本2.7.5
  • Fedora 64位
  • OpenCV 2.4.7

以下是测试代码

import cv2
img = cv2.imread('/path/image1.jpeg',0)
cv2.imshow('Display',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

当使用Spyder的F5运行这个脚本时,它使用带有这一行的嵌入式python终端运行它:

runfile('/home/user/Workspace/test.py', wdir=r'/home/user/Workspace')

在这个例子中,cv2.waitKey(0)或cv2.waitKey(-1)不起作用,并且在按下示例代码的键后窗口仍然打开 试图关闭窗口将导致“无响应,强制退出”警报 但是当从终端执行脚本时,它可以100%

没有找到问题来源,如果我找到它会更新。

答案 4 :(得分:1)

以下是在所有平台上实现最佳性能的简约代码:

import cv2

img = cv2.imread("image.jpg")
cv2.imshow("Window", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

现在一些观察

当用户要通过按 0 关闭窗口时,他/她必须确保{{1}在窗口聚焦时按}键。因为如上所述,如果终端处于焦点位置,则什么也不会发生,并且代码执行会停留在0上,直到窗口处于焦点位置时正确按下cv2.waitKey(0)键为止。

在窗口处于焦点状态时按0键,是关闭窗口并确保的正确方法,一旦在0行中销毁了窗口并程序结束后,用户可以重新获得终端的控制权

如果通过鼠标单击退出窗口,则该窗口将被破坏,但是在无法取回终端的控制权的情况下,用户将最终陷入困境。在这种情况下,用户可能希望关闭无响应的终端并打开一个新终端。

答案 5 :(得分:1)

单击图像窗口(活动),然后按和键,不要在终端窗口中书写。

答案 6 :(得分:1)

使用cv2.waitKeyEx(0)。

它以相同的方式运行,并等待您的响应,直到您将其撤销。

我希望它会有所帮助。 Nithesh varmma

答案 7 :(得分:0)

cv2.waitKey(0)表示脚本处于无限循环中,循环后等待0毫秒 .only指定的密钥可以阻止它。

您没有指定应用条件的结束。

试试这段代码: Using other keys for the waitKey() function of opencv

答案 8 :(得分:0)

基于unix的系统运行来自python notebooks的opencv程序时出现问题。

检查这个备用方法我的建议是在终端的python中运行代码。你不会遇到任何问题

复制相同的代码并使用filename.py

保存
import cv2
input = cv2.imread('path_to_image.png')
cv2.imshow('Hello World', input)
cv2.waitKey(0)
cv2.destroyAllWindows()

然后打开特定目录,然后打开终端

步骤:

Open Terminal
cd path/to/filename.py
source activate YOURPROFILE 
python filename.py

这将解决问题

https://youtu.be/8O-FW4Wm10s

答案 9 :(得分:0)

按照[运行]-> [每个文件的配置]-> [在外部系统终端中执行]解决在Ubuntu下的Spyder中。

答案 10 :(得分:0)

即使您使用窗口上的十字按钮关闭窗口,这也将起作用。

import numpy as np
import cv2

img = cv2.imread('arvid.jpg', 0)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)

while True:
    k = cv2.waitKey(30) & 0xFF
    if k == 27:         # wait for ESC key to exit
        cv2.destroyAllWindows()
    elif k == ord('s'):  # wait for 's' key to save and exit
        cv2.imwrite('arvid2.jpg', img)
        cv2.destroyAllWindows()
    if cv2.getWindowProperty("image", 0) == -1:
        break

答案 11 :(得分:0)

此问题在某些早期版本的opencv中发生。 因此,您只需要将opencv更新到最新版本。版本4.0.0.21对我有用。 使用下面的命令。

update opencv to version 4.0.0.21.