私は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)
を使用するのが正しいことがわかりました。
わかりません問題はどこにありますか?
このコードは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()
これが将来の読者に役立つことを願っています。
ウィンドウにフォーカスが合っているときにキーを押すと機能することがわかりました。コマンドラインにフォーカスがある場合、何も起こりません
この場合、ウィンドウを破棄した後にcv2.waitKey(1)を追加すると機能します。
cv2.imshow('imgae',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
画像ウィンドウ(アクティブ)をクリックしてから、キーを押します。ターミナルウィンドウには書き込まないでください。
すべてのプラットフォームで最高のパフォーマンスを得るための最小限のコード:
_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チュートリアルから最初の例をコピーします。
テスト用のコードはこちら
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の問題が見つかりませんでした。見つかった場合は更新されます。
これは、ウィンドウの十字ボタンを使用してウィンドウを閉じても機能します。
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
cv2.waitKey(0)は、スクリプトがループの後に0ミリ秒待機する無限ループにあることを意味します。指定されたキーのみが停止できます。
アプリ終了条件を指定しませんでした。
このコードを試してください: opencvのwaitKey()関数に他のキーを使用
UbuntuのSpyderで、[実行]-> [ファイルごとの構成]-> [外部システム端末で実行]に従って解決しました。
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
これは問題を解決します