惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 司徒正美
Last Week in AI
Last Week in AI
爱范儿
爱范儿
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
量子位
V
V2EX
博客园 - 叶小钗
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
OpenCV 图像合成视频
Yiwei Zhang · 2024-06-27 · via 又见苍岚

OpenCV 可以将图像转为视频帧,本文记录相关用法。

简介

OpenCV 将图像合成视频的方法核类为 cv::VideoWriter,参数如下:

参数名 含义 备注
filename 保存视频的文件名。
fourcc 指定视频编解码器的 FourCC 代码,用于将视频压缩成指定格式,例如:“XVID”、“MJPG”, "mp4v"等。 可以使用 cv2.VideoWriter_fourcc() 函数来获取 FourCC 代码。
fps 指定视频帧率,即每秒显示的帧数。
frameSize 指定视频帧的大小,即视频的分辨率。 可以使用 (width, height) 形式的元组来指定。
isColor 指定是否为彩色视频。 如果为 True,则为彩色视频;如果为 False,则为灰度视频 ( 选项仅在 Windows 下支持)。

其中,前三个参数是必需的,后两个参数是可选的。

cv2.VideoWriter_fourcc()

该函数接收四个字符作为输入参数,构造要使用的编解码器的 fourcc 代码。

官方文档

使用举例:

代码 格式
cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘1’) 该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’) motion-jpeg
cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’) MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’) MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’) 该参数是YUV编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’) 该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’) 该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) 该参数是Flash视频,文件名后缀为.flv

这里 有完整的编码器代码列表。

cv2.VideoWriter

获取到 fourcc 之后,可以创建 VideoWriter 对象了

1
writer = cv2.VideoWriter(output_video_name, fourcc, 6, (width, height))

将图像用该对象写入到文件中即可。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def img2video(image_path_list, output_video_name, fps, resize=None):

if resize is not None:
shape = (resize[0], resize[1])
else:
shape = None

# 获取图像的尺寸
image = cv2.imread(image_path_list[0])
image = vv.to_colorful_image(image)
if shape is not None:
image = vv.image_resize(image, shape)

height, width, channels = image.shape
shape = (width, height)

# 创建视频 writer
fourcc = cv2.VideoWriter.fourcc(*'mp4v') # 使用mp4视频编码
out = cv2.VideoWriter(output_video_name, fourcc, fps, (width, height))

# 遍历图像路径列表,并将图像写入视频文件
for image_path in vv.tqdm(image_path_list):
image = cv2.imread(image_path)
image = vv.to_colorful_image(image)
image = vv.image_resize(image, shape)
out.write(image)

# 释放writer
out.release()

该函数封装在 vvdutils 库 img2video 函数中。

参考资料

文章链接:
https://www.zywvvd.com/notes/study/image-processing/opencv/opencv-img2video/opencv-img2video/