cv2.waitKey()

最近在学习opencv,群里遇到一个同学在cv捕捉视频文件的时候出现闪退情况,按道理说图片会出现闪退,是因为cv2.waitKey(delay)其中delay值太小导致的,因为delay为等待按键的时间,这个单位是毫秒,如果不是0的话数又太小,那就会出现闪退的情况,但视频是有很多帧的,比如delay为10为10毫秒处理一帧,如果delay值很大10000时,视频播放就会很卡,最后发现是他的代码释放资源的时候在while里面,就是视频播放一帧的时候就释放资源了。

针对cv2.waiKey()的意思,参考了一篇博主的文章,(23条消息) cv2.waitKey()_长 青的博客-CSDN博客

  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代码块)
————————————————
版权声明:本文为CSDN博主「长  青」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_54977011/article/details/120208280

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值