OpenCVで使われるwaitkeyとは?定義から実用例をわかりやすく解説!?
今回はOpenCVで使われるwaitkeyに関して、定義から実用例を丁寧に解説致します。なんとなくwaitkeyを使っていた、OpenCVを初めて使い始めた方へおすすめです。ぜひ最後までご覧ください。
OpenCVで使われるwaitkeyとは?
OpenCVで使われるwaitkeyとは、画像を表示するウィンドウからの、キーボード入力を待ち受ける関数を意味します。
具体的なイメージとしては、以下の画像の状態で、キーボード入力を待ち受けるイメージを持ってもらうと良いでしょう。
OpenCVで使われるwaitkey関数の定義
waitkey関数は、
1# cv2(OpenCV)を利用する宣言を行う。
2import cv2
3
4# 第一引数 : 画像を表示するウィンドウからの、キーボード入力を待ち受ける時間。ミリ秒単位指定。int型。
5# (例) 1000を指定すると、1秒間キーボード入力を待ち受ける。2000を指定すると、2秒間キーボード入力を待ち受ける。
6# ミリ秒とは? : https://e-words.jp/w/%E3%83%9F%E3%83%AA%E7%A7%92.html#:~:text=%E3%83%9F%E3%83%AA%E7%A7%92%E3%81%A8%E3%81%AF%E3%80%81%E6%99%82%E9%96%93,1%E7%A7%92%E3%81%AB%E7%9B%B8%E5%BD%93%E3%81%99%E3%82%8B%E3%80%82
7# ※ 0以下の数字を指定すると、画像を表示するウィンドウからの、キーボード入力が発生しない限り、ウィンドウを表示し続けます。
8# ※ キーボード入力を待ち受ける時間を経過すると、強制的にウィンドウが閉じられます。
9# ※ キーボード入力を待ち受ける時間より前に、キーボード入力を行うと、キーボード入力が行われたタイミングで強制的にウィンドウが閉じられます。
10# ※ 画像を表示するウィンドウがない場合、waitkey関数の動作が不十分となります。imshow関数などを利用して、画像を表示するウィンドウを表示してから、waitkey関数をご利用ください。
11# imshow関数とは? : https://kuroro.blog/python/KKpVvO2dnumZPPVu6lH1/
12
13# 戻り値 : キーボード入力があった場合、10進数で表記されるアスキーコードの値が返されます。キーボード入力なく、ウィンドウが強制的に閉じられた場合、-1が返されます。
14# 10進数とは? : https://wa3.i-3-i.info/word1608.html
15# アスキーコードとは? : https://wa3.i-3-i.info/word15290.html
16# アスキーコード表 : https://www.k-cube.co.jp/wakaba/server/ascii_code.html
17cv2.waitkey(時間(ミリ秒単位指定))
で定義されます。
例えば以下のようなコードを作成すると、
1import cv2
2import sys
3
4# imread : 画像ファイルを読み込んで、多次元配列(numpy.ndarray)にする。
5# imreadについて : https://kuroro.blog/python/wqh9VIEmRXS4ZAA7C4wd/
6# 第一引数 : 画像のファイルパス
7# 戻り値 : 行 x 列 x 色の三次元配列(numpy.ndarray)が返される。
8img = cv2.imread('./xxx.xxx')
9
10# 画像ファイルが正常に読み込めなかった場合、プログラムを終了する。
11if img is None:
12 sys.exit("Could not read the image.")
13
14# imshow : ウィンドウへ画像を表示する関数
15# 第一引数 : ウィンドウ名(自由に命名ください)
16# 第二引数 : 多次元配列(numpy.ndarray)
17# imshow関数について : https://kuroro.blog/python/KKpVvO2dnumZPPVu6lH1/
18cv2.imshow('image', img)
19
20# Pythonプログラムの終了とともに、画像を表示するウィンドウがすぐに閉じられてしまうため、waitKey関数を利用する。
21k = cv2.waitKey(0)
22
23# キーボードから's'の文字が入力された場合、画像を保存する。
24# ord : 文字を10進数で表記されるアスキーコードへ変換する。
25if k == ord('s'):
26 # imwrite : 画像の保存を行う関数
27 # 第一引数 : 保存先の画像ファイル名
28 # 第二引数 : 多次元配列(numpy.ndarray)
29 # <第二引数の例>
30 # [
31 # [
32 # [234 237 228]
33 # ...
34 # [202 209 194]
35 # ]
36 # [
37 # [10 27 16]
38 # ...
39 # [36 67 46]
40 # ]
41 # [
42 # [34 51 40]
43 # ...
44 # [50 81 60]
45 # ]
46 # ]
47 # imwriteについて : https://kuroro.blog/python/i0tNE1Mp8aEz8Z7n6Ggg/
48 cv2.imwrite('output.jpg', img)
画像を表示するウィンドウからのキーボード入力を待ち受けて、「s」のキーボード入力を行うと、画像を保存できます。
imreadに関しては、OpenCVで使われるimreadとは?使い方から配列が画像になる仕組みを解説でまとめていますので、詳しく知りたい方は是非ご確認ください。
imwriteに関しては、OpenCVで使われるimwriteとは?imwriteの定義から使用例をご紹介でまとめていますので、詳しく知りたい方は是非ご確認ください。
imshowに関しては、OpenCVで使われるimshowとは?定義から実用例をわかりやすく解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。
まとめ
- OpenCVで使われるwaitkeyとは、画像を表示するウィンドウからの、キーボード入力を待ち受ける関数を意味する。
- 画像を表示するウィンドウがない場合、waitkey関数の動作が不十分となる。imshow関数などを利用して、画像を表示するウィンドウを表示してから、waitkey関数をご利用ください。