『OpenCV-Python』视频的读取和保存
点赞 + 关注 + 收藏 = 学会了
上一讲介绍了 OpenCV 的读取图片的方法,这一讲简单聊聊 OpenCV 读取和保存视频。
视频的来源主要有 2 种,一种是本地视频文件,另一种是实时视频流,比如手机和电脑的摄像头。
要读取这两种视频的方法都是一样的,只是传的参数不同而已。
读取摄像头视频
读取摄像头的内容并显示出来需要几步
获取摄像头内容
逐帧渲染
解读一下上面的代码。
通过
cv2.VideoCapture(0)
读取视频,传入参数 0 表示打开默认摄像头。对于有多个摄像头的设备,可以使用 1、2 等参数指定其他摄像头。使用
cap.isOpened()
检查摄像头是否成功打开。如果失败,程序将退出。cap.read()
可以读取视频里的 1 帧,ret
表示读取是否成功,frame
包含图像数据。1 帧只有 1 个画面,所以通过
while
循环不断读取视频流的内容。将
cv2.waitKey(1)
设置为 1 毫秒的延时,这样可以实现几乎实时的显示效果。最后通过
cv2.waitKey(1) == ord('q')
判断用户有没有按下“q”键,如果按下了就退出循环,然后关闭所有窗口释放资源。
读取本地视频文件
读取本地视频文件的操作流程和读取摄像头视频流差不多,最主要的区别是 cv2.waitKey()
里需要传入的数值。
input_video_path
存放本地视频的文件地址,需要包含文件类型的后缀名。把视频地址丢进
cv2.VideoCapture()
里就可以读取到这个视频了。while
里的操作和前面读取摄像头视频流一样,唯一区别是cv2.waitKey(30)
,这里我传入了 30,这表示每一帧的显示时间是 30 毫秒,这样视频播放速度就比较正常。
保存视频
不管是将摄像头的视频保存到本地,还是在本地视频增加一点滤镜再保存到本地,操作都是一样的。
主要有以下几步操作:
获取视频源
设置要输出的视频路径、参数(宽、高、帧率)
逐帧保存视频
举个例子,我要将一个彩色的视频转成黑白视频再保存到本地。
说明一下上面的代码。
读取视频:
cv2.VideoCapture(input_video_path)
用于读取视频文件。获取视频属性:如帧宽度、高度和帧率等,用于配置输出视频。
创建输出视频:
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
用于创建保存视频的对象。cv2.VideoWriter
的output_video_path
参数用来指定保存视频文件的路径。fourcc
表示视频编码格式的四字符代码,常用的格式有:cv2.VideoWriter_fourcc(*'XVID')
: 常用于 .avi 格式的视频,跨平台兼容性较好。cv2.VideoWriter_fourcc(*'MJPG')
: 使用 Motion JPEG 编码,也可以用于 .avi 格式。cv2.VideoWriter_fourcc(*'mp4v')
: 常用于 .mp4 格式的视频。cv2.VideoWriter_fourcc(*'DIVX')
: 支持 .avi 格式。fps
表示视频的帧率,即每秒帧数(Frames Per Second)。帧率决定视频的播放速度和流畅度。常用的帧率数值有 24、30、60。在上面的例子中使用的是原视频的帧率。frameSize
用于设置输出视频帧的宽度和高度,单位是像素。isColor
指示视频是否是彩色。默认是True
表示才是。循环读取和保存帧:每一帧读取后可以对帧进行处理,然后写入到输出视频中。
释放资源:处理完成后释放资源,确保文件保存正确。
推荐关注 《OpenCV-Python专栏》
以上就是本文的全部内容。加上上一篇介绍如何读取和保存图片,学习 OpenCV 需要的“材料”已经准备好了。接下来几讲都是介绍 OpenCV 的基础用法,也就是学习“如何加工这些材料”。基础扎实后再讲解几个实战案例。
点赞 + 关注 + 收藏 = 学会了
版权声明: 本文为 InfoQ 作者【德育处主任】的原创文章。
原文链接:【http://xie.infoq.cn/article/70729380b831561bbe5b336d1】。文章转载请联系作者。
评论