我在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)
是正确的。
我不明白,问题出在哪里?
答案 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教程中复制第一个例子,我正在使用:
以下是测试代码
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
这将解决问题
答案 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.