簡體   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