Python OpenCV 等待按鍵事件 cv2.waitKey

本篇介紹如何在 Python OpenCV 中使用 cv2.waitKey 等待按鍵事件,進一步的處理鍵盤事件,例如像離開程式這樣的事件處理。

使用範例

如果遇到 ImportError: No module named 'cv2' 這個錯誤訊息的話,請安裝 python 的 OpenCV 模組,參考這篇安裝吧!。

在影像處理中經常需要取得鍵盤輸入事件,之後在更進一步地去處理這些按鍵對應的程式邏輯,
在 python opencv 中 要補捉鍵盤事件的話可以使用 cv2.waitKey(),它會在給定的時間內監聽鍵盤事件,
給訂的時間到了 cv2.waitKey() 回傳按下按鍵的數字,沒有按鍵按下的話會回傳-1,
那我們以播放影片為例,對播放影片功能不熟悉的可以回去看我之前的文章
這邊以使用者會按下 Ese 鍵與 Enter 鍵的情況為例,

python3-opencv-waitKey.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2

cap = cv2.VideoCapture('vtest.avi')
play = 1
while cap.isOpened():
if (play):
ret, frame = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
cv2.imshow('frame', frame)
key = cv2.waitKey(90)
if key == ord('q') or key == 27: # Esc
print('break')
break
elif key == 13: # Enter
print('play / pause')
play = play ^ 1
else:
print(key)
cap.release()
cv2.destroyAllWindows()

另外其他常見的按鍵有下列,按鍵值為我在Ubuntu下測試的結果:
Esc: 27
Enter: 13
Up: 82
Down: 84
Left: 81
Right: 83
Space: 32
Backspace: 8
Delete: 255
Home: 80
End: 87
PageUp: 85
PageDown: 86
PrintScreen: 在 ubuntu 中會被系統攔截去

程式啟動後可以在影片播放中按下 Enter 鍵,就會暫停播放,再按一次 Enter 鍵就會繼續播放,
下圖就是暫停播放的樣子,

好啦!這篇教學就到這篇囉~
下一篇教學是如何顯示camera攝影機串流影像

參考
键盘事件监听 - Python-OpenCV基础入门
http://www.1zlab.com/wiki/python-opencv-tutorial/opencv-waitkey-keyboards/
python - Using other keys for the waitKey() function of opencv - Stack Overflow
https://stackoverflow.com/questions/14494101/using-other-keys-for-the-waitkey-function-of-opencv
windows - How to detect ESCape keypress in Python? - Stack Overflow
https://stackoverflow.com/questions/5137238/how-to-detect-escape-keypress-in-python

其它相關文章推薦
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 灰階轉彩色(Gray to RGB/BGR)
Python OpenCV 影像二值化 Image Thresholding
Python OpenCV 影像平滑模糊化 blur
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV 垂直vconcat 和水平hconcat 影像拼接
Python OpenCV resize 圖片縮放
Python 新手入門教學懶人包
小專案 Python OpenCV 圖片轉字元圖畫