键盘事件监听¶
概要¶
本文讲解了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')