Opencv基础之④通过获取的帧图像保存视频(python实现)

  • 实现视频保存的主要函数
  • 实例
  • 实例·VideoWriter主要参数补充说明
  • 实例·代码·
  • 总结


才学习opencv没多久,本意是积累和回顾,望大神/大佬勿怪~

实现视频保存的主要函数

  • cv2.VideoCapture(0)——视频源——这里是本机摄像头/还可以直接放入视频文件
  • cv2.VideoWriter_fourcc(*‘视频格式’)——配置/选择需要的视频解码器,这个是为了创建VideoWriter对象时的参数(也就是返回值为fourcc)——fourcc
  • cv2.VideoWriter——创建一个存储对象然后返回——其主要参数见后文
  • isOpened()——判断视频源是否准备好/初始化完成
  • read()——读取帧图像
  • cv2.flip()——翻转获取的帧图像
  • write()——写入需要存储的帧图像——实现视频存储
  • imshow()——显示当前获取的帧图像

实例

实例·VideoWriter主要参数补充说明

VideoWriter参数依次如下:

  1. 保存的文件名——要包含视频格式后缀哦
  2. 指定对应的视频解码器——fourcc(由于VideoWriter_fourcc(*‘视频格式’)来配置)
  3. 帧数——可以是小数哦,它代表着1s内多少帧
  4. 帧大小:也就是保存的图像大小
  5. isColor标志——默认为true,一般不需要设置这个位
  6. 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)按序存储,得到我们所保存的视频!!!