import os import cv2 # 要被合成的多张图片所在文件夹 # 路径分隔符最好使用“/”,而不是“\”,“\”本身有转义的意思;或者“\\”也可以。 # 因为是文件夹,所以最后还要有一个“/” file_dir = 'C:/Users/YUXIAOYANG/Desktop/tset/' list = [] for root ,dirs, files in os.walk(file_dir): for file in files: list.append(file) # 获取目录下文件名列表 # VideoWriter是cv2库提供的视频保存方法,将合成的视频保存到该路径中 # 'MJPG'意思是支持jpg格式图片 # fps = 5代表视频的帧频为5,如果图片不多,帧频最好设置的小一点 # (1280,720)是生成的视频像素1280*720,一般要与所使用的图片像素大小一致,否则生成的视频无法播放 # 定义保存视频目录名称和压缩格式,像素为1280*720 video = cv2.VideoWriter('C:/Users/YUXIAOYANG/Desktop/test.mp4',cv2.VideoWriter_fourcc('m', 'p', '4', 'v'),5,(1981,991)) for i in range(1,len(list)): img = cv2.imread('C:/Users/YUXIAOYANG/Desktop/tset/'+list[i-1]) #读取图片 print(img.shape) #img = cv2.resize(img,(1981,991)) #将图片转换为1280*720像素大小 video.write(img) # 写入视频 # 释放资源 video.release()
1.任务需求背景
在标注数据的过程中,需要【反复】浏览大量图片(万张以上的数量级),确认图片中的目标类别以及室内户型布局。
但是,在电脑上浏览图片有很大的不足:(a)需要持续点击鼠标或者键盘;(b)图片加载跟不上点击速度。
值得注意的是:网上有很多代码(图片转视频),但是真正能用的几乎很少,本博文的代码经过测试,可以成功生成视频。
2.代码依赖库
opencv-python==4.5.2 numpy==1.19.2 glob(python自带模块)
3.代码实战
基本步骤如下:
a. 使用glob
获取路径下的所有图片;
b. cv2.imread()
读取所有图片;
c. 将读取的图片存储在新的列表中,img_array
;
d. 使用cv2.VideoWriter()
创建VideoWriter
对象,注意参数的设置;
e. 使用cv2.VideoWriter().write()
保存 img_array
中的每一帧图像到视频文件;
f. 释放 VideoWriter
对象;
import cv2 import numpy as np import glob import os # 其它格式的图片也可以 img_array = [] for filename in glob.glob('E:/3DS1Data/20211118/29984CRL30V00067087/dataset/rgb/*.png'): img = cv2.imread(filename) height, width, layers = img.shape size = (width, height) img_array.append(img) # avi:视频类型,mp4也可以 # cv2.VideoWriter_fourcc(*'DIVX'):编码格式 # 5:视频帧率 # size:视频中图片大小 out = cv2.VideoWriter('E:/3DS1Data/20211118/29984CRL30V00067087/dataset/project-all.avi', cv2.VideoWriter_fourcc(*'DIVX'), 5, size) for i in range(len(img_array)): out.write(img_array[i]) out.release()
注意事项
通过测试发现,Mp4格式的视频清晰度低于 Avi 视频的清晰度。
The above is the detailed content of How to combine pictures into video files (MP4) using Python?. For more information, please follow other related articles on the PHP Chinese website!