我在 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 教程中的第一个示例,我正在使用:
这是测试代码
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%工作
没有找到问题根源,如果找到会更新。
在Ubuntu下的Spyder中通过[运行]->[每个文件的配置]->[在外部系统终端中执行]解决了。
那么使用 cv2.waitKeyEx(0)。
它以同样的方式运行并等待您的响应,直到您撤销它。
我希望它有帮助。 Nithesh varmma
cv2.waitKey(0) 表示脚本处于无限循环中,循环后等待 0 毫秒 .只有指定按键才能停止。
您没有指定应用程序结束条件。
试试这个代码: 使用其他按键进行opencv的waitKey()函数
基于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
这将解决问题
即使您使用窗口上的十字按钮关闭窗口,这也将起作用。
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
对我有用。
使用下面的命令。
update opencv to version 4.0.0.21.
cv2.destroyAllWindows()
下面添加了 cv2.waitkey(0)
。对于上下文,我正在 RaspberryPi 上运行用于相机系统的 python 程序。
在满足
cv2.destroyAllWindows()
(按下一个键)后,使用cv2.waitkey(0)
关闭(或“销毁”)创建的窗口,立即关闭窗口并允许我的程序继续运行(就像我期望的程序一样)做)。
如果没有
cv2.destroyAllWindows()
,当程序到达 waitkey(0) 行时,按键看起来不会执行任何操作;有时通过终端发送终止信号,甚至不会终止进程,我必须通过按显示窗口右上角的“x”手动发送一个信号。
我希望这有帮助。
代码没有任何问题。 可能是图像文件已被显示。 JB 单元左侧的 * 符号将一直亮起,直到您单击关闭显示的图像。