web-dev-qa-db-ja.com

cv2.imshow()関数は、常に応答しないと言うウィンドウを開きます-python opencv

非常に単純なプログラムを実行しようとしています。 Pythonのopencvライブラリを使用してjpgファイルを開いて表示するには。最初はすべて正常に機能していましたが、現在は画像を表示せずに「応答していません」というウィンドウを開くだけです。タスクマネージャーに移動して閉じる必要があります。

from numpy import *
import matplotlib as plt
import cv2

img = cv2.imread('amandapeet.jpg')
print img.shape

cv2.imshow('Amanda', img)
21
vicky

もう1行見逃しました:

cv2.waitKey(0)

その後、キーボードのいずれかのキーを押すまで、ウィンドウに画像が表示されます。または、次のように渡すことができます。

cv2.waitKey(1000)
cv2.destroyAllWindows()

ここでは、ウィンドウに1000ミリ秒、つまり1秒間の画像が表示されます。その後、ウィンドウは自動的に消えます。しかし、場合によってはそうではありません。したがって、cv2.destroyAllWindows()を使用して強制的に破棄できます。

最初に他のチュートリアルをお読みください: http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html

41
Abid Rahman K

ここでの答えはどれも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)
6
Julio

私は最近opencv 3.2とmatplotlibで作業しており、matplotlibからのpyplotのインポートがcv2.imshow()関数と何らかの干渉を起こすことを(行をコメントアウトする試行錯誤を通して)発見しました。なぜ、どのように機能するのかはわかりませんが、誰かがこの問題を検索してこの古いフォーラムに出くわした場合、これが役立つかもしれません。私はこの干渉buの周りの解決策を見つけようとしています

2
Madelyn A.

私のために働いた解決策:inline graphicsからautoに切り替えます。 SpyderJupyterノートブックの両方で機能しました。

  • スパイダーの設定を変更するにはTools>Preferences>IPhytonに移動console>Graphics> Backend:Automatic(バックエンドをインラインから自動に変更)
  • ノートブックの設定を変更するには:コマンドを入力:

    %matplotlib auto


私のケースの背景(迅速に判断できる人向け)

以前は問題なく動作していました。画像を開くことができ、ロードし、応答します(「応答しない」とは言わず、閉じる、フォーカスするなど)。その後、いくつかのパッケージをインストールし、明らかにいくつかの設定が台無しになった(Spyderの開いているファイルもリセットされた)。

WaitKey(1)(および0、30、1000などの値も)を追加しようとしました。少なくとも画像をロードしました。しかし、画像フレームは「応答していません」でした:更新されなかった、閉じられなかった、上に来なかったなど。cv2.destroyAllWindows()を使用して閉じなければなりませんでした。

WaitKeyの期間中、すべてが正常に機能したことに注意してください。これを同じ名前のウィンドウに同じ画像を表示し、数秒間待機するループに入れます。ループ中はすべて正常に動作します。ループが終了するとすぐに、画像ウィンドウは「応答なし」になります(GUIスレッドの問題のように見えます)。 cv2.startWindowThread()を使用してみましたが、違いはありませんでした。

最後に、InlineグラフィックからAutoに変更すると、すべてが正常に戻りました。

0
Kadir A. Peker

以下のコード行を追加するまで、この同じエラーが発生していました。 waitKeyには、0より大きい数字(1、100以上)を入力できます。これはウィンドウの遅延時間として機能し、ミリ秒単位です。

----> cv2 waitKey(0)----> cv2 destroyAllWindows()

0

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

0
R K Bhalodia

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()

今すぐ別のウィンドウに画像が表示されることを期待しています。

0
Rajkamal Mishra

私も同じ問題に直面しました。私はコマンドラインを実行しています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])

これを追加すると、イメージウィンドウが閉じました。コマンドを再度実行すると、新しいインスタンスが作成されます。それでも問題が解決しない場合は試してみてください。

0
shiva