使用OpenCV将图片组合形成视频

正文索引 [隐藏]

OpenCV图片组合成视频

代码已经上传GItHub
实现步骤如下:

代码实现

使用到的模块

import cv2
import os

遍历单帧图像储存文件夹

这里我们注意,因为os.listdir得到的文件名列表是无序的,我们需要进行排序,当然前提是我们的文件名是有序的,比如这里我们文件名是0000000000.png—0000000086.png。

我们这里使用lambda表达式创建匿名函数key = lambda x:int(x[:-4]),即key是从头到倒数第四位的内容,然后使用list.sort()进行排序

file_path = "data/"   # 文件夹位置
filenames = os.listdir(file_path)    # 读取文件夹内所有文件名
filenames.sort(key=lambda x:int(x[:-4]))    # 按文件名顺序排序

创建视频写入器

我们这里是一个8s的视频,所以视频帧率应该为 图像数量/时间(len(filenames)/8),如果不清楚视频时间这个值可以随缘调整
cv2的视频写入器有6个参数:

文件名 编码格式 帧率 图片大小 色彩模式
.avi对应前两种编码 .mp4为第三种。 ‘DIVX’,‘MJPG’,*’MJPG’ 默认为FALSE灰度图
writer = cv2.VideoWriter('test_video.avi',cv2.VideoWriter_fourcc(*'MJPG'),len(filenames)/8,(1392,512),True)

视频写入

将每张图片依次写入

for files in filenames:
    frame = cv2.imread(file_path+files)
    writer.write(frame)

释放写入器

writer.release()

完整代码

# -*- coding: utf-8 -*-
import cv2
import os
file_path = "data/"

filenames = os.listdir(file_path)
filenames.sort(key=lambda x:int(x[:-4]))

writer = cv2.VideoWriter('test_video.avi',cv2.VideoWriter_fourcc(*'MJPG'),len(filenames)/8,(1392,512),True)
for files in filenames:
    frame = cv2.imread(file_path+files)
    writer.write(frame)
writer.release()