繁体   English   中英

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

[英]Python OpenCV - waitKey(0) does not respond?

我在 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)是正确的。

不明白,问题出在哪里?

我发现如果我在窗口处于焦点时按下键,它会起作用。 如果命令行处于焦点,则什么也不会发生

在这种情况下,在销毁窗口后添加 cv2.waitKey(1) 应该可以工作。

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

此代码适用于 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()

希望这对未来的读者有所帮助。

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

这是在所有平台上获得最佳性能的简约代码:

import cv2

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

现在有一些观察

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

在窗口处于焦点时按下0键是关闭窗口的正确方法,并确保一旦窗口在cv2.destroyAllWindows()行中被销毁并且程序结束,用户可以重新获得对终端的控制.

如果通过鼠标点击退出窗口,窗口会被销毁是的,但用户最终会处于无法取回终端控制权的情况 在这种情况下,用户可能想要关闭没有响应的终端并打开一个新终端。

尝试直接从终端执行脚本对我来说是 100% 的工作但不是从 IDE 中执行,例如,我解释说:我使用的是 Fedora 20 并遇到了同样的问题,从官方 opencv python 教程中复制了第一个示例,我是使用:

  • Fedora 20 64 位
  • 适用于 Python 的 Spyder IDE
  • 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) 不起作用,并且在使用示例代码按下键后窗口保持打开状态尝试关闭窗口将导致“无响应,强制退出” " Alert但是当从终端执行脚本时,它 100% 工作

没有找到问题的根源,如果我找到了会更新。

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

那么使用 cv2.waitKeyEx(0)。

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

我希望它有帮助。 尼特什瓦玛

cv2.waitKey(0) 表示脚本处于无限循环中,循环后等待 0 毫秒。只有指定的键才能停止它。

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

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

基于 Unix 的系统从 python 笔记本运行 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

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

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

这个问题出现在一些早期版本的 opencv 中。 所以你只需要更新opencv到最新版本。 版本4.0.0.21对我4.0.0.21 使用下面的命令。

update opencv to version 4.0.0.21.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM