如何使用 cv2.waitKey() 等待两个不同的键

How to wait for two different keys using cv2.waitKey()

我想实现一个功能,当 cv2 显示一些视频时,它可以等待两个不同的键输入并对它们做出不同的响应。

我正在使用这段代码来等待特定的键:

if cv2.waitKey(1) & 0xFF == ord('q'):
    break

假设我想使用第二个密钥 'w' 并以不同方式响应该密钥,我的第一次尝试是:

if cv2.waitKey(1) & 0xFF == ord('q'):
    break
elif cv2.waitKey(1) & 0xFF == ord('w'):
    print('w is pressed')

但是效果不是很好,我必须一直按w一段时间,直到程序响应。

有什么建议吗?

非常感谢。

尝试:

k = cv2.waitKey(1) & 0xFF

if k == ord('q'):
    break

elif k == ord('w'):
    print('w is pressed')

问题是waitKey方法被调用了多次。您应该使用变量来存储它的结果并多次检查它:

pressedKey = cv2.waitKey(1) & 0xFF
if pressedKey == ord('q'):
    break
elif pressedKey == ord('w'):
    print('w is pressed')

等待背后的原因是两个函数调用都读取了键盘缓冲区,因此仅当软件在第一个分支计算后立即收到 w 键时才执行第二个分支。