Opencv基础之④通过获取的帧图像保存视频(python实现)
- 实现视频保存的主要函数
- 实例
- 实例·VideoWriter主要参数补充说明
- 实例·代码·
- 总结
才学习opencv没多久,本意是积累和回顾,望大神/大佬勿怪~
实现视频保存的主要函数
- cv2.VideoCapture(0)——视频源——这里是本机摄像头/还可以直接放入视频文件
- cv2.VideoWriter_fourcc(*‘视频格式’)——配置/选择需要的视频解码器,这个是为了创建VideoWriter对象时的参数(也就是返回值为fourcc)——fourcc
- cv2.VideoWriter——创建一个存储对象然后返回——其主要参数见后文
- isOpened()——判断视频源是否准备好/初始化完成
- read()——读取帧图像
- cv2.flip()——翻转获取的帧图像
- write()——写入需要存储的帧图像——实现视频存储
- imshow()——显示当前获取的帧图像
实例
实例·VideoWriter主要参数补充说明
VideoWriter参数依次如下:
- 保存的文件名——要包含视频格式后缀哦
- 指定对应的视频解码器——fourcc(由于VideoWriter_fourcc(*‘视频格式’)来配置)
- 帧数——可以是小数哦,它代表着1s内多少帧
- 帧大小:也就是保存的图像大小
- isColor标志——默认为true,一般不需要设置这个位
- isColor标志的作用:官网解释:If True, the encoder needs a color box, otherwise it will be used with a grayscale box(默认与彩色框一起使用,否则将与灰度框一起使用),我暂时没怎么用到过……
实例·代码·
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG') # 确定解码器
out = cv2.VideoWriter('save_elements1.mp4', fourcc, 20.0, (640, 480))
# 参数依次为:文件;视频解码器选择;之后的两个参数:每秒帧数(浮点数)以及帧大小(框架大小——即视频窗体大小)
if not cap.isOpened():
print("未获取帧……")
else:
while True:
ret, frame = cap.read() # 第二个参数是返回的帧图像参数
if not ret:
print("未获取到正确的帧图像\n正在退出中……")
break
else:
frame = cv2.flip(frame, 0) # 翻转图像
out.write(frame) # 存储帧图像——依次存入每一帧获取的图像
cv2.imshow('frame', frame) # 显示该帧图像
if cv2.waitKey(1) & 0xFF == ord('Q'):
print("正在退出视频存储……")
break
cap.release() # 先释放视频捕获
out.release() # 再释放存储对象的释放
cv2.destroyAllWindows()
总结
存储视频的思路是,通过获取源的帧图像,在满足设定的VideoWriter对象下,存储获取的帧图像,并(write)按序存储,得到我们所保存的视频!!!