web-dev-qa-db-ja.com

Python OpenCV-waitKey(0)は応答しませんか?

私は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)を使用するのが正しいことがわかりました。

わかりません問題はどこにありますか?

21
Dhorka

このコードは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()

これが将来の読者に役立つことを願っています。

8
Raoul HATTERER

ウィンドウにフォーカスが合っているときにキーを押すと機能することがわかりました。コマンドラインにフォーカスがある場合、何も起こりません

30
user2022581

この場合、ウィンドウを破棄した後にcv2.waitKey(1)を追加すると機能します。

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

画像ウィンドウ(アクティブ)をクリックしてから、キーを押します。ターミナルウィンドウには書き込まないでください。

3
rahul singh

すべてのプラットフォームで最高のパフォーマンスを得るための最小限のコード:

_import cv2

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

そして今いくつかの観測

ユーザー_0_keyを押してウィンドウを閉じたい場合、ユーザーはウィンドウがフォーカスされているときに_0_キーが押されていることを確認してください。上記のように、端末がフォーカスされている場合は何も起こらず、ウィンドウがフォーカスされている間に_0_キーが適切に押されるまでコード実行はcv2.waitKey(0)で止まります。

ウィンドウがフォーカスされているときに_0_キーを押すウィンドウを閉じて確認する正しい方法です、ウィンドウが行cv2.destroyAllWindows()で破棄されたらプログラムは終了しますユーザーは端末の制御を取り戻すことができます

ウィンドウがマウスクリックで終了した場合、ウィンドウはyesで破棄されますが、ユーザーは端末の制御を取り戻すことができないの状況に陥ります。このような状況では、ユーザーは応答しない端末をシャットダウンして、新しい端末を開くことができます。

スクリプトを直接実行してみてくださいターミナルから100%動作します私にとってはただし、IDEなどからではなく、説明します:I ' Fedora 20を使用して、同じ問題が発生しました。公式のopencv pythonチュートリアルから最初の例をコピーします。

  • Fedora 20 64ビット
  • スパイダーIDE 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%動作します

originの問題が見つかりませんでした。見つかった場合は更新されます。

1
Cherif KAOUA

これは、ウィンドウの十字ボタンを使用してウィンドウを閉じても機能します。

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
0
juliukvi

cv2.waitKey(0)は、スクリプトがループの後に0ミリ秒待機する無限ループにあることを意味します。指定されたキーのみが停止できます。

アプリ終了条件を指定しませんでした。

このコードを試してください: opencvのwaitKey()関数に他のキーを使用

0
Tomasz Edwin

UbuntuのSpyderで、[実行]-> [ファイルごとの構成]-> [外部システム端末で実行]に従って解決しました。

0
Apogentus

pythonノートブックからopencvプログラムを実行しているUNIXベースのシステムに問題があります。

この代替方法を確認してください私の提案は、ターミナルで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

0
R K Bhalodia