OpenCV中cv2.waitKey()无法检测Delete键的问题咨询
OpenCV中cv2.waitKey()无法检测Delete键的问题咨询
嘿,我来帮你搞定这个Delete键检测的问题!
先回答你的第一个问题:cv2.waitKey(1)完全可以正确检测Delete键
你之前用key == 127没效果,核心原因是不同操作系统下,OpenCV对特殊功能键的返回值不一样:127是ASCII标准里的DEL键值,但这对应的其实是键盘上Backspace(退格键)在某些场景下的返回值,而Windows平台下,OpenCV返回的Delete键值根本不是127。
再给你说更准确的Delete键检测方法
第一步:先确认你的Delete键实际返回值
你可以先修改代码,把按下按键时的原始值打印出来,这样就能精准拿到Delete键对应的数值:
import cv2 while True: key = cv2.waitKey(1) if key != -1: # 打印原始值和十六进制格式,方便查看 print(f"按键原始值: {key}, 十六进制: {hex(key)}") # 区分普通按键和特殊功能键 if key & 0xFF != 0: print(f"普通按键: {chr(key & 0xFF)}") else: # 特殊键的键码存储在高8位 special_code = key >> 8 print(f"特殊键码: {special_code}, 十六进制: {hex(special_code)}") # 等你看到Delete键的返回值后,把判断条件替换成对应的数值 if key == 你的Delete键原始值: print("Delete key detected!") break cv2.destroyAllWindows()
在你的Windows 10环境下,运行这段代码后按下Delete键,你会发现它的原始返回值应该是11776(十六进制0x2E00),对应的特殊键码是46(十六进制0x2E)。
第二步:精准检测Delete键的两种写法
知道了返回值后,你可以用两种方式来判断:
- 直接匹配原始返回值:
if key == 0x2E00: # 用十六进制可读性更强,等价于十进制11776 print("Delete key detected!") break
- 提取高8位的特殊键码来判断(这种写法更通用,适合所有特殊功能键):
if key != -1 and (key >> 8) == 46: print("Delete key detected!") break
额外小提示
建议你以后处理按键时,先对返回值做key = cv2.waitKey(1) & 0xFFFF处理,这样可以完整保留所有按键信息(不管是普通键还是特殊键),避免只取低8位丢失特殊键的判断依据。
备注:内容来源于stack exchange,提问作者MIN WU
相关产品推荐
相关产品推荐

