waitKey()的基本逻辑,他会在一定时间内等待接收键盘上的一个值(都是在展示imshow后面使用)
# 1.若参数delay≤0:表示一直等待按键;
# 2、若delay取正整数:表示等待按键的时间,比如cv2.waitKey(30),就是等待30(milliseconds);(视频中一帧数据显示(停留)的时间)
# cv2.waitKey(delay)返回值:
# 1、等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27,即0001  1011);(接收值为非空,if代码块执行)
# 2、等待期间没有按键:返回 -1;(非0非空,if代码块执行)
#  应用,因为图片就一帧,所以参数小于等于0就行了,展示完就任意键退出,也不用什么判断条件.但是视频的话要循环展示全部帧,也要能让他退出,所以首先不能小于等于0,这样它就不动了,并且给一个值就直接执行if代码块,所以应该设置等待时间,一般都是10-50,这样视频不快不慢.然后也设置一个退出.(捕获键的ASCII码等于设定值退出)
#  我们知道,当按下按键时,waitkey函数的输入值一定是一个正整数。任何一个正整数,与1111 1111做&运算,其结果必然是他本身(因为正数的补码等于原码)系统中按键对应的ASCII码值并不一定仅仅只有8位,同一按键对应的ASCII并不一定相同(但是后8位一定相同)为什么会有这个差别?是系统为了区别不同情况下的同一按键。比如说“q”这个按键当小键盘数字键“NumLock”激活时,“q”对应的ASCII值为100000000000001100011 。而其他情况下,对应的ASCII值为01100011。所以加上& 0xFF主要是为了防止报错
(还有一个退出点,是视频执行完,读取空帧退出,这个退出点在上面那个if代码块)

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐