非常に単純なプログラムを実行しようとしています。 Pythonのopencvライブラリを使用してjpgファイルを開いて表示するには。最初はすべて正常に機能していましたが、現在は画像を表示せずに「応答していません」というウィンドウを開くだけです。タスクマネージャーに移動して閉じる必要があります。
from numpy import *
import matplotlib as plt
import cv2
img = cv2.imread('amandapeet.jpg')
print img.shape
cv2.imshow('Amanda', img)
もう1行見逃しました:
cv2.waitKey(0)
その後、キーボードのいずれかのキーを押すまで、ウィンドウに画像が表示されます。または、次のように渡すことができます。
cv2.waitKey(1000)
cv2.destroyAllWindows()
ここでは、ウィンドウに1000ミリ秒、つまり1秒間の画像が表示されます。その後、ウィンドウは自動的に消えます。しかし、場合によってはそうではありません。したがって、cv2.destroyAllWindows()を使用して強制的に破棄できます。
最初に他のチュートリアルをお読みください: http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html
ここでの答えはどれもMacOSでは機能しませんでした。以下の作品:
cv2.waitKey(1)
aftercv2.destroyAllWindows()
を追加するだけです。
例:
import cv2
image = cv2.imread('my_image.jpg')
cv2.imshow('HSV image', hsv_image); cv2.waitKey(0); cv2.destroyAllWindows(); cv2.waitKey(1)
私は最近opencv 3.2とmatplotlibで作業しており、matplotlibからのpyplotのインポートがcv2.imshow()関数と何らかの干渉を起こすことを(行をコメントアウトする試行錯誤を通して)発見しました。なぜ、どのように機能するのかはわかりませんが、誰かがこの問題を検索してこの古いフォーラムに出くわした場合、これが役立つかもしれません。私はこの干渉buの周りの解決策を見つけようとしています
私のために働いた解決策:inline graphicsからautoに切り替えます。 SpyderとJupyterノートブックの両方で機能しました。
ノートブックの設定を変更するには:コマンドを入力:
%matplotlib auto
私のケースの背景(迅速に判断できる人向け):
以前は問題なく動作していました。画像を開くことができ、ロードし、応答します(「応答しない」とは言わず、閉じる、フォーカスするなど)。その後、いくつかのパッケージをインストールし、明らかにいくつかの設定が台無しになった(Spyderの開いているファイルもリセットされた)。
WaitKey(1)(および0、30、1000などの値も)を追加しようとしました。少なくとも画像をロードしました。しかし、画像フレームは「応答していません」でした:更新されなかった、閉じられなかった、上に来なかったなど。cv2.destroyAllWindows()を使用して閉じなければなりませんでした。
WaitKeyの期間中、すべてが正常に機能したことに注意してください。これを同じ名前のウィンドウに同じ画像を表示し、数秒間待機するループに入れます。ループ中はすべて正常に動作します。ループが終了するとすぐに、画像ウィンドウは「応答なし」になります(GUIスレッドの問題のように見えます)。 cv2.startWindowThread()を使用してみましたが、違いはありませんでした。
最後に、InlineグラフィックからAutoに変更すると、すべてが正常に戻りました。
以下のコード行を追加するまで、この同じエラーが発生していました。 waitKeyには、0より大きい数字(1、100以上)を入力できます。これはウィンドウの遅延時間として機能し、ミリ秒単位です。
----> cv2 waitKey(0)----> cv2 destroyAllWindows()
pythonノートブックを使用している場合、Unixベースのシステムでcv2.waitKey(0)およびcv2.destroyallwindows()を使用してopencvのプログラムを実行すると問題が発生します。
あなたの画像の凍結を防ぐ代替方法があります
手順:-pythonノートブックからコードをコピーし、新しいfilename.pyを作成して貼り付けます-ターミナルを開きます-cd path/to/file-source activate VirtualEnvironment-python filename.py
これにより、ターミナルから直接コードが実行されます。これがお役に立てば幸いです。リンク例: https://youtu.be/8O-FW4Wm10s
Cv2.imshow()関数は、画像をロードして閉じるために常に2つの関数を取ります。これらの2つの関数は、cv2.waitKey()およびcv2.destroyAllWindows()です。 cv2.waitKey()関数内で、任意の値を指定して画像を閉じ、さらにコード行を続けることができます。
# First line will provide resizing ability to the window
cv.namedWindow('Amanda', cv.WINDOW_AUTOSIZE)
# Show the image, note that the name of the output window must be same
cv.imshow('Amanda', img)
# T0 load and hold the image
cv.waitKey(0)
# To close the window after the required kill value was provided
cv.destroyAllWindows()
今すぐ別のウィンドウに画像が表示されることを期待しています。
私も同じ問題に直面しました。私はコマンドラインを実行していますpython次のコードでcentos 7でプロンプトを表示します
>> import cv2, numpy as np
>> cap=cv2.VideoCapture(0)
>> img=cap.read()
>> cap.release()
>> cv2.imshow('image',img[1])
>> cv2.waitKey(0)
>> cv2.destroyAllWindows()
>> cv2.waitKey(1)
それでも問題は持続し、解決しませんでした。だから私は追加しました
>> cv2.imshow('image',img[1])
これを追加すると、イメージウィンドウが閉じました。コマンドを再度実行すると、新しいインスタンスが作成されます。それでも問題が解決しない場合は試してみてください。