第二章:图像基本操作 2-视频的读取与处理

import cv2

vc=cv2.VideoCapture('悬崖之下.mp4')
#检查是否正确打开
if vc.isOpened():
    open,frame=vc.read()
else:
    open=False

while open :
    ret,frame=vc.read()
    if frame is None :
        break
    if ret ==True :   #读取没毛病
        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)   #当前图像进去  直接转换成灰度图
        cv2.imshow('result',gray)
        if cv2.waitKey(1) & 0xff ==27 :
            '''
疑惑(参考别人的https://blog.csdn.net/hao5119266/article/details/104173400)
首先&运算即“and”运算。

其次0xFF是16进制数,对应的二进制数为1111 1111。

然后cv2.waitkey(delay)函数

1.若参数delay≤0:表示一直等待按键;

2、若delay取正整数:表示等待按键的时间,比如cv2.waitKey(30),就是等待30(milliseconds);(视频中一帧数据显示(停留)的时间)

cv2.waitKey(delay)返回值:

1、等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27,即0001  1011);

2、等待期间没有按键:返回 -1;

我们知道,当按下按键时,waitkey函数的输入值一定是一个正整数。任何一个正整数,与1111 1111做&运算,其结果必然是他本身(因为正数的补码等于原码),例

0001 1011

1111  1111

&运算结果为:0001 1011

那么这个&0xff到底有什么用呢?

解释
查阅资料我才知道,原来系统中按键对应的ASCII码值并不一定仅仅只有8位,同一按键对应的ASCII并不一定相同(但是后8位一定相同)

为什么会有这个差别?是系统为了区别不同情况下的同一按键。

比如说“q”这个按键

当小键盘数字键“NumLock”激活时,“q”对应的ASCII值为100000000000001100011 。

而其他情况下,对应的ASCII值为01100011。

相信你也注意到了,它们的后8位相同,其他按键也是如此。

为了避免这种情况,引用&0xff,正是为了只取按键对应的ASCII值后8位来排除不同按键的干扰进行判断按键是什么。
            '''
            break
vc.release()
cv2.destroyAllWindows()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值