You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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键的两种写法

知道了返回值后,你可以用两种方式来判断:

  1. 直接匹配原始返回值:
if key == 0x2E00:  # 用十六进制可读性更强,等价于十进制11776
    print("Delete key detected!")
    break
  1. 提取高8位的特殊键码来判断(这种写法更通用,适合所有特殊功能键):
if key != -1 and (key >> 8) == 46:
    print("Delete key detected!")
    break

额外小提示

建议你以后处理按键时,先对返回值做key = cv2.waitKey(1) & 0xFFFF处理,这样可以完整保留所有按键信息(不管是普通键还是特殊键),避免只取低8位丢失特殊键的判断依据。

备注:内容来源于stack exchange,提问作者MIN WU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:33:11