鍵盤事件監聽¶
概要¶
本文講解了HighGUI里面的waitKey鍵盤事件監聽函數,最后提供了一個waitKey的Demo。
keywords waitkey highgui 鍵盤事件監聽
waitKey函數API講解¶
接下來我們再講一下opencv中一個鍵盤事件監聽函數waitKey
cv2.waitKey(delay_ms)
這個函數其實有兩個功能。
-
等待一個按鍵事件的發生
-
延時delay_ms個毫秒
它的邏輯是這樣的, 如果過了n個ms仍然也沒等到有按鍵事件發生, 就繼續執行下面的函數, 所以變相等于延時(delay)。
注意 , 這個函數只有在當前至少有一個窗口是激活狀態下, 才會生效
換句話說, 如果你在這期間, 點開了另外一個無關窗口, 無論你怎么按鍵都不會響應。
如果等待設置為0, 就意味著永久等待, 直到有任意一個按鍵按下。
cv2.waitKey(0)
waitKey
返回的數值 是按下的按鍵字符,對應的ASCII編碼。
key_num = cv2.waitKey(0)
如果是等待有限時間例如,
key_num = cv2.waitKey(1000)
如果等待1000ms
也就是1s之后, 沒有按鍵按下, 那么返回的這個值就是-1
我們在進行按鍵字符匹配的時候, 一般不會直接比對字符數值。
你可以使用python的強制類型轉換, 將數值轉換為字符串chr(value)
例如我們判斷, 按鍵是否是k鍵的時候, 判斷可以這么寫:
key_num = cv2.waitKey(0) if chr(key_num) == 'k': print("k pressed...")
或者,你可以這么寫
我們利用函數ord(char)
, 可以將字符,轉換為對應ASCII編碼的數值。
key_num = cv2.waitKey(0) if key_num == ord('k'): print("k pressed...")
綜合例程¶
waitkey_demo.py
import cv2 # 創建一個窗口 cv2.namedWindow('image') while True: # 等待按鍵事件發生 key_code = cv2.waitKey(1000) if key_code != -1: print('key {} pressed!!! value={}'.format(chr(key_code), key_code)) if chr(key_code) == 'q': # 退出程序 print('Quit') break else: # 沒有按鍵按下 print('no key pressed , wait 1s') cv2.destroyWindow('image')