本文将介绍如何使用 Python 和 OpenCV 将一组图像文件合成为一个视频文件。你将学会:
使用
os
模块遍历文件夹中的图像使用
cv2.VideoWriter
写入视频设置分辨率与帧率参数
对图像尺寸进行统一处理
简单的视频生成应用开发
1. 所需模块与安装
本章需要以下 Python 模块:
opencv-python
:图像处理和视频写入os
:文件路径和文件遍历
安装指令(在 Anaconda Prompt 中执行):
pip install opencv-python
2. 合成视频的基本原理
视频本质上是由一帧帧的静态图像按照一定的时间间隔播放形成的。在 OpenCV 中,我们可以通过 cv2.VideoWriter
类将图像写入为一个视频文件。
常见参数说明:
参数 | 含义 |
---|---|
output.avi |
输出文件名,格式可为 .avi 或 .mp4 |
fps |
帧率,决定每秒显示几张图 |
frame_size |
每帧的分辨率(宽,高) |
fourcc |
编码方式,如 'XVID' 、'mp4v' |
3. 示例代码:将图片生成视频
以下是完整的 Python 示例代码:
import cv2
import os
# 配置参数
image_folder = 'image_test/' # 图片目录路径 :ml-citation{ref="3,5" data="citationList"}
output_video = 'output.avi' # 输出视频文件名
fps = 1 # 帧率 :ml-citation{ref="5" data="citationList"}
frame_size = (1280, 720) # 视频分辨率(需与图片尺寸一致):ml-citation{ref="3" data="citationList"}
# 获取排序后的图片列表 :ml-citation{ref="5" data="citationList"}
images = [img for img in os.listdir(image_folder) if img.endswith((".jpg", ".png"))]
images.sort() # 按文件名排序 :ml-citation{ref="5" data="citationList"}
# 创建视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式
video = cv2.VideoWriter(output_video, fourcc, fps, frame_size)
# 逐帧写入 :ml-citation{ref="3" data="citationList"}
for image in images:
img_path = os.path.join(image_folder, image)
frame = cv2.imread(img_path)
frame = cv2.resize(frame, frame_size) # 统一尺寸 :ml-citation{ref="3" data="citationList"}
video.write(frame)
video.release() # 释放资源 :ml-citation{ref="3" data="citationList"}
4. 注意事项
图片尺寸必须与
frame_size
一致,否则视频播放时会出现问题。可以使用cv2.resize
调整图像尺寸。fps
越高,视频播放越快。根据图片数量和期望总时长灵活设定。输出文件格式与编码器要匹配,如
.avi
配XVID
,.mp4
配mp4v
。
6. 练习题
修改代码,使视频播放时每张图停留 2 秒。
修改输出格式为
output.mp4
,并使用合适的编码器。添加异常处理逻辑,跳过无法读取的图片。
7. 拓展阅读
OpenCV 官方文档:https://docs.opencv.org
视频编码格式:
XVID
,MJPG
,H264
,mp4v
Python 图像处理扩展库:
PIL
,imageio