OpenCV是专门用来处理图像的库,既然能处理图片,那肯定也能处理视频和摄像头拍摄的视频及图片,因为视频就是由一帧帧图片连接而成的,而视频和图片也是借摄像头进行捕捉图像,所以理所当然的,OpenCV处理这些毫无压力。
读取视频
先上代码
cv2.VideoCapture()这个函数是创建一个对象,参数可以是视频文件,也可以是设备号,这里读取的视频文件,所以传入的是视频文件路径。
cap.get(5)这个函数是得到这个视频文件的FPS,因为OpenCV读取视频画面是使画面停留窗口的时间来控制播放的速度,如果要与原视频播放速度差不多那就可以对画面显示时间value进行设置value=1000/fps。
cap.read()这个函数如果读取到画面就会返回True和画面数据,布尔值可以检测视频是不是到结尾了,所以可以运用在while判断中。
if(cv2.waitKey(33) & 0xFF == ord('q'))这句的意思是画面持续的时间,如果在等待时间内按下了q键则退出循环,程序继续运行下面的代码,这段视频的FPS是29.97,换算成等待时间就是33毫秒,播放的速度就跟原视频速度基本一致。
读取摄像头
同样的用cv2.VideoCapture()创建一个对象,这里传入的是我电脑的摄像头代号,一般是0。
cap.isOpened()这个函数是检测摄像头有没有打开,如果摄像头打开了则返回true,否则返回False,那就需要用函数cap.open()打开设备。
cv2.cvtColor(frame,cv2.COLOR_BGR2BGRA)这个函数是对读取的图像进行处理,第二个参数是代表OpenCV读到的图像颜色是BGR编码的要改变成BGRA彩色图像,这样我们在窗口看见的画面就是彩色的,改变这个参数就会有不同的显示效果。
保存视频
cv2.VideoWriter_fourc()这个函数是定义视频的编码格式,FourCC 就是一个 4字节码,一般有这些格式DIVX, XVID, MJPG, X264, WMV1, WMV2,在Windows系统上用的较多的是DIVX。
也可以这样传cv2.cv.FOURCC('M','J','P','G')或者cv2.cv.FOURCC('MJPG')
cv2.VideoWriter()这个函数是设置保存视频的路径和文件名及格式,视频的FPS和画面的长宽大小。比如上面的FPS设置为20,长宽为640480。
设置好这些就跟读取摄像头的操作差不多了(按q键结束),运行程序就会发现项目里多了一个output.avi的视频文件。
领取专属 10元无门槛券
私享最新 技术干货