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

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

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

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

Python

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

Q&A

解決済

2回答

9736閲覧

OpenCVで画像を開いた後、ウィンドウが閉じれなくなる。

mint_

総合スコア13

OpenCV

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

Python

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

0グッド

1クリップ

投稿2019/04/09 13:24

前提・実現したいこと

OpenCVで画像を開いた後、正常にウィンドウを閉じたい。

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

実行環境
MacOS High Sierra
Python3.7
opencv-python 4.0.0.21
jupyter notebook

jupyter notebook上で下記のソースコードを実行すると、DockでPython Launcherが立ち上がり、別ウィンドウが出現、画像自体は表示されます(画像上でカーソルを動かすとウィンドウ下部のRBGの値が変化します)が、何らかのキーを1度押すと、ローディング状態となり閉じることができません。画面を閉じるため、DockのPython Launcherを強制終了している状況です。
プログラミング初心者のため、的外れな説明となっていましたら申し訳ございません。
アドバイスを頂けると幸いです。よろしくお願いします。

#エラーメッセージ
特に表示されません。
cv2.waitKey()の引数を'1'にすると、実行結果として'-1'と表示されるのみです。

該当のソースコード

ソースコード

import cv2
import os
img = cv2.imread('src/Berry.jpg')

cv2.startWindowThread()
cv2.imshow('img',img)
cv2.waitKey(0) & 0xff
cv2.destroyAllWindows()

試したこと

①teratail内で同様の質問があったので参考にさせて頂きました。cv2.destroyAllWIndows()の次の行に、cv2.waitKey(0)やcv2.waitKey(0) & 0xffを加えてみましたが、うまくいきませんでした。また、waitKey()の引数も'0'以外に'1'や他の数字を入れてみましたが、状況に変化はありませんでした。
https://teratail.com/questions/107002

②以下サイトに、64 bit マシンを使っている場合, k = cv2.waitKey(0) の部分を k = cv2.waitKey(0) & 0xFF と変更してください.と記載があったため、その通りにしました。
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_gui/py_image_display/py_image_display.html

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

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

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

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

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

tiitoi

2019/04/09 14:40

OpenCV の GUI 機能と Notebook は相性がよくありません。画像を確認したいだけであれば、cv2.imshow() でなく、Ipython モジュールを使えば、Notebook に直接画像を表示できます。
mint_

2019/04/11 15:32

相性が良くないんですね。実は、UdemyでOpenCVの講義を受講していまして、講師の方がjupyter notebook上で問題なくcv2.imshow()などのコードを動作させていたので、できれば自分も同じ環境でできればなと考えています。教えて頂いたIpythonの方も試してみます。
tiitoi

2019/04/11 15:52

やり方を回答に記載しました。
guest

回答2

0

ベストアンサー

Notebook 上で画像を表示したいのであれば、Notebook の機能で表示したほうがよいと思います。

OpenCV であれば、imread() で読み込んだ画像は以下のようにして表示できます。

python

1import cv2 2from IPython.display import Image, display 3 4def imshow(img): 5 '''画像を Notebook 上にインラインで表示する。 6 ''' 7 img = cv2.imencode('.png', img)[1] 8 display(Image(img)) 9 10img = cv2.imread('sample.jpg') 11imshow(img)

イメージ説明

投稿2019/04/11 15:52

tiitoi

総合スコア21956

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

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

mint_

2019/04/16 14:26

御回答ありがとうございます! 無事、表示出来ました。
guest

0

下記のリンクにて同様の問題について質問がされていました。

DestroyWindow does not close window on Mac using Python and OpenCV

これによると、cv2.destroyAllWindows()の後ろにcv2.waitKey(1)を加えると効果があるそうです。

本当にそうなるのか、なぜそうなるのか私には全くわかりませんが、
とりあえずの方法として参考になれば幸いです。

投稿2019/04/09 14:41

amahara_waya

総合スコア1029

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

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

mint_

2019/04/11 15:39

試したことの①に記載の通り、その方法も試してみたのですがうまく動作しませんでした泣
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問