📜  cv2 保存视频 mp4 - Python (1)

📅  最后修改于: 2023-12-03 15:14:24.360000             🧑  作者: Mango

以cv2保存视频mp4 - Python

在计算机视觉中,我们经常需要将图像序列保存成视频文件以进行后续处理或展示。本文将介绍如何使用Python中的OpenCV(cv2)库保存视频文件。

准备工作

在使用cv2保存视频时,我们需要准备以下工作:

  • 安装opencv-python库。
  • 准备一些图像序列(可以是图像文件夹,也可以是摄像头的实时帧)。
!pip install opencv-python
保存图像序列为视频
import cv2
import os

# 图像序列所在文件夹路径
image_folder = './images'
# 视频输出路径及名称
video_name = 'output.mp4'

# 获取文件夹中第一个图像作为参考大小
img = cv2.imread(os.path.join(image_folder, os.listdir(image_folder)[0]))
height, width, _ = img.shape

# 初始化视频编解码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter(video_name, fourcc, 30, (width, height))

# 遍历文件夹中每一张图像并写入视频
for filename in sorted(os.listdir(image_folder)):
    img = cv2.imread(os.path.join(image_folder, filename))
    video.write(img)

# 释放资源
video.release()
cv2.destroyAllWindows()

代码解读:

  1. 在图像序列所在文件夹路径image_folder下,我们以cv2.imread()方式获取第一张图像的大小信息,并初始化视频编解码器。
  2. 使用cv2.VideoWriter()函数创建一个输出视频文件对象video,其中设定的帧率为30,视频大小与第一张图像相同。
  3. 遍历image_folder中的每一张图像,并逐个用video.write()函数写入视频中。
  4. 写入完毕后,需要释放video对象并关闭窗口。
实时保存摄像头视频

如果我们需要从摄像头获取实时帧,并实时将帧序列保存为视频文件,可以使用如下代码:

import cv2

# 设定获取实时帧的分辨率大小
width, height = 640, 480

# 初始化视频编解码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter('output.mp4', fourcc, 30, (width, height))

# 打开摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)

while(True):
    # 逐帧获取摄像头画面
    ret, frame = cap.read()

    if ret:
        # 写入输出视频文件
        video.write(frame)

        # 实时展示摄像头视频
        cv2.imshow('frame', frame)

    # 响应键盘按键
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
video.release()
cv2.destroyAllWindows()

运行该代码后即可打开计算机摄像头,并将实时帧保存为一个名为output.mp4的视频文件。在代码中,我们通过cv2.VideoCapture()函数来打开摄像头并设置帧的大小,并通过cv2.imshow()实时展示摄像头的画面。使用cv2.waitKey()函数来监听键盘,当按下q键后退出程序。最后需要释放videocap对象并关闭窗口。

总结

本文介绍了如何使用cv2库将图像序列保存为视频文件,并且给出了实时保存摄像头视频的代码。通过这些方法,我们可以高效地处理并分析计算机视觉中的图像序列数据。