質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1547閲覧

cv2.imshowを入れるとプロンプトが返ってこない

NaoY

総合スコア12

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/10 01:49

前提・実現したいこと

コマンドプロンプトでAnacondaで作った仮想環境をアクティベートして、VScodeで書いたコードを実行させています。
簡単な図を作って表示させたいのですが、図を表示させるとプロンプトが返ってきません。

発生している問題・エラーメッセージ

メッセージは特に表示されませんが、画像を小窓で表示させたあと(窓を閉じることもできます)、

((仮想環境名)) C:\Users(ユーザー名)>python -u "D:(フォルダ名)(ファイル名).py ■

■の位置のところでプロンプトのような点滅があるものの、キー入力に反応せず、コマンドプロンプトの窓のタイトルにコマンドが表示されたままです。
別の個所をクリックすると「選択」とウィンドウタイトルの左端に表示されるので、フリーズしているわけではなさそうです。

該当のソースコード

import numpy as np import cv2 backgrd = np.full((210, 425, 4), (100, 100, 100, 255), dtype=np.uint8) cv2.imshow('image', backgrd) cv2.waitKey(0) cv2.destroyAllWindows() print("yo")

試したこと

"cv2.waitKey(0) & 0xFF" と入れるといい、といったようなことが投稿サイトに書いてあったので試してみましたが特に変化はありませんでした。
また、最後にprintを入れていますが、printされません。

補足情報(FW/ツールのバージョンなど)

64ビットのパソコンで、Windows10です。
opencvのバージョンは3.4.2のようです。
Pythonは3.7.3です。
初心者なので質問も下手かもしれませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

図を表示させるとプロンプトが返ってきません。

cv2.waitKey(0)によって画像ウインドウ側で入力待ちをしているからです。
この入力待ちの間はプロンプト上では入力できません。
画像側で何らかキー入力すればcv2.destroyAllWindows()に処理が移りウインドウが閉じられプロンプト上にyoとprintされます。
ただし画像表示中に画像ウインドウを×なりで閉じると、そのままプロンプト側に制御が戻らない状態になりyoとプリントされなくなります。

画像ウインドウでキー入力または×なりで閉じてもyoと表示させたい場合は、以下のようなループを組めばよいです。
参考:python+opencvのwhile文の部分について

Python

1import numpy as np 2import cv2 3 4backgrd = np.full((210, 425, 4), (100, 100, 100, 255), dtype=np.uint8) 5while True: 6 cv2.imshow('image', backgrd) 7 key = cv2.waitKey(10) 8 # 何等か入力されたか画像ウインドウが閉じられた 9 if key >= 0 or cv2.getWindowProperty('image', cv2.WND_PROP_VISIBLE) < 1: 10 break 11 12cv2.destroyAllWindows() 13print("yo")

投稿2019/05/10 02:52

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NaoY

2019/05/13 17:42

ご回答ありがとうございました!!! なるほど、キー入力を待ち続けている間に窓を消すと先に進めなくなるとは盲点でした。 早速教えて頂いたコードの数値を変えて試してみました。 waitKey(5000)で5秒の間に窓を手動で閉じても数秒は待たないとyoがPrintされないので、waitKeyしている間はキー入力されるか指定時間経つまでif以下の部分も読み込まれないということなのでしょうかね。 確認のために画像表示させたいだけなので、素直にキー入力しようと思います。 ありがとうございました!
can110

2019/05/13 20:38

> waitKey(5000)で5秒の間に窓を手動で閉じても数秒は待たないとyoがPrintされないので そうですね。窓を閉じた場合でもキー入力待ちはしているので指定秒数たたないと次の処理に移りません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問