cv2.imshowコマンドがopencv-pythonで正しく機能しない


111

私はopencv 2.4.2、python 2.7を使用しています次の簡単なコードは正しい名前のウィンドウを作成しましたが、その内容は空白であり、画像は表示されません。

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)

誰かがこの問題について知っていますか?


ファイルパスが間違っている可能性があります。Windowsは/ではなく\を使用します。OpenCVがWindows上で/を許容するかどうかわかりません。修正しても問題が解決しない場合は、画像が正しい場所にあり、有効な画像であることを確認してください。
fmw42

回答:


228

imshow()でのみ動作しwaitKey()ます:

import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()

(ウィンドウを更新するために必要なメッセージループ全体がそこに隠されています。)


3
check print imgは、NoneTypeオブジェクトではなく正しいnumpy配列を出力します。
アビッドラーマンK

7
後世のために明確にするために、通常の状況では、これが正解です。waitKeyを省略すると、(通常)質問で説明されている動作とまったく同じ結果になります。
Snesticle 2015年

45

私のために役立つ答えをここで見つけました:http : //txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

インタラクティブなipythonセッションを実行していて、highguiウィンドウを使用したい場合は、最初にcv2.startWindowThread()を実行してください。

詳細:HighGUIは、OpenCVコードからの画像やビデオを表示するためのシンプルなインターフェースです。それは次のように簡単でなければなりません:

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)

7
あなたは)(cv2.destroyAllWindowsによって後でそれを閉じることができます
Zuza

highguiのQT実装では、startWindowThread()は何もしません。github.com/opencv/opencv/blob/...
kusi

24

cv2.waitKey(0)後に使用する必要がありますcv2.imshow("window",img)。そうして初めて機能します。

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

画像を表示するためにPython IDEをインストールする必要があるかもしれませんし、ウィンドウを探す必要があるかもしれませんが、前面に表示されないことがあります。cv2.waitKey()の括弧はミリ秒単位であると想定しているため、空白のままにすると、画像が永久に表示されます。
アフマディア

11

Pythonコンソール内で実行している場合は、次のようにします。

img = cv2.imread("yourimage.jpg")

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()

次にEnter、イメージを押すと、イメージが正常に閉じ、他のコマンドの実行を続行できます。


7

私は同じ問題に直面しました。IDLEから画像を読み取ってを使用して表示しようとしましたcv2.imshow()が、ウィンドウを閉じよpythonw.exeうとすると、表示ウィンドウがフリーズして表示されません。

以下の投稿は、これがなぜ起こっているのかについて考えられる説明を提供します

pythonw.exeが応答していません

" 基本的に、IDLEからこれを実行しないでください。スクリプトを記述し、.pyw拡張子を使用して名前を付けてダブルクリックすることにより、Windowsの場合はシェルまたはスクリプトから直接実行します。IDLEの独自のイベントには明らかに矛盾がありますループとGUIツールキットからのもの。

imshow()IDLEで直接実行するのではなく、スクリプトで使用して実行すると、うまくいきました。


リンクが古くなる可能性があるので、リンクに提供された説明を追加してください(少なくとも最低限)。ありがとう:)
achedeuzot

これは私が抱えている問題なのでバンプしますが、「これをしないでください」は私が探している答えではありません=)
Eric


4

私にとっては、0より大きい数値のwaitKey()が機能しました

    cv2.waitKey(1)

3

あなたはこのスレッドのどこかに必要なすべての部分を持っています:

if cv2.waitKey(): cv2.destroyAllWindows()

アイドルで私のためにうまく働きます。


3

これを機能させていない場合は、

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

1つのファイルに入れて実行します。


1

後に追加のメソッドは必要ありませんwaitKey(0)(上記のコードに返信)

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
cv2.waitKey(0)

ウィンドウが表示されます->ウィンドウをクリックしてEnterキーをクリックします。ウィンドウが閉じます。


0

「cv2.waitKey(0)」を使用する場合は、小文字の「k」でプログラムがフリーズする可能性があるため、「cv2.waitkey(0)」の代わりに「cv2.waitKey(0)」と書き込んだことを確認してください。 。


3
小文字のキーを持つメソッドはAPIに存在しません。メソッドが存在しないため、コードはエラーをスローします。
rayryeng

0

-215エラーも発生しました。imshowが問題であると思いましたが、imreadを変更して、存在しないファイルを読み取ると、エラーは発生しませんでした。そこで、画像ファイルを作業フォルダーに入れ、cv2.waitKey(0)を追加しました。


-1

エラー:(-215)関数imshowのsize.width> 0 && size.height> 0

このエラーは、画像が見つからないために発生します。したがって、imshow関数のエラーではありません。


この質問には関係ありません。
rayryeng

-1

同じ215エラーが発生しましたが、C:\ Folder1 \ Folder2 \ filename.extのように、イメージへの完全なパスを指定することで克服できました。


「同じ215エラー」とは何ですか?OPの質問のどこにもエラーが記載されていません。また、OPは画像へのフルパスを使用しているため、これが質問にどのように答えるかはわかりません。
Max Vollmer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.