OpenCV(Python)で画像をウィンドウで開いたり閉じたりする

2022.03.04

こんにちは、CX事業本部 IoT事業部の若槻です。

OpenCVを久しぶりに触るために、以前投稿した下記エントリを参考にしてみたのですが、環境が変わったからなのか上手く動かない部分がありました。

そこで今回は、OpenCV(Python)で画像をウィンドウで開いたり閉じたりする方法を改めて確認してみました。

環境

$  sw_vers  
ProductName:	macOS
ProductVersion:	11.6
BuildVersion:	20G165

$  python
Python 3.9.6 (default, Jun 29 2021, 06:20:32) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.5.5'

やってみた

めそ子さん(彩木あかり)の画像ファイルを使用して確認してみます。

画像ファイルのロード

画像ファイルからのデータのロードはimread()を使用します。

これにより画像データをMat形式で取得することができます。

>>> img = cv2.imread('mesoko.jpg')

OpenCVでは原則としてこのMatオブジェクトを対象として画像処理を行います。

画像をウィンドウで開く

取得したMatオブジェクトの画像をウィンドウで開いてみます。imshow()で先程のMatオブジェクトを開き、waitKey(1)(詳しくは後述)を実行します。

>>> cv2.imshow('img', img)
>>> cv2.waitKey(1)

imgウィンドウで画像を開けました。

さらに追加で画像を開いてみます。次は同じ画像ファイルをimread()でグレースケールでロードし、開いてみます。

>>> img_gray = cv2.imread('mesoko.jpg', cv2.IMREAD_GRAYSCALE)
>>> cv2.imshow('img_gray', img_gray)
>>> cv2.waitKey(1)

グレースケールの画像をimg_grayウィンドウで追加で開けました。

画像のウィンドウを閉じる

特定のウィンドウを閉じたい場合は、destroyWindow()を使用します。

>>> cv2.destroyWindow('img')
>>> cv2.waitKey(1)

imgウィンドウを閉じれました。

開いているすべてのウィンドウを閉じたい場合は、destroyAllWindows()を使用します。

>>> cv2.destroyAllWindows()
>>> cv2.waitKey(1)

すべてのウィンドウを閉じれました。

waitKey()って何

imshow()およびその他画像ウィンドウを操作するFunctionが実際に実行されるためには、waitKey()を続けて実行してキー入力待ち状態とする必要があります。waitKey(1)と実行すれば、1m秒だけキー入力待ち状態としてすぐに終了させ(次のプロンプトを表示させ)、画像を開いたまますぐに同じプロセスで別のコマンドを実行することができます。

ちなみにwaitKey()0を指定または引数未指定の場合、待機期間が無期限となるため、画像ウィンドウの操作は行われますが、その後次のコマンドが実行できない(プロンプトが戻らない)状態となるため、注意しましょう。

参考

以上