使用python+opencv将图片合成视频


用到的包

import cv2
import glob,os
import numpy as np

加载中文路径

def cv_imread(file_path):
    cv_img = cv2.imdecode(np.fromfile(file_path,dtype = np.uint8),-1)
    return cv_img

修正图片大小

def resize(img_array,align_mode):
    _height = len(img_array[0])
    _width = len(img_array[0][0])
    for i in range(1,len(img_array)):
        img = img_array[i]
        height = len(img)
        width = len(img[0])
        if align_mode == 'smallest':
            if height < _height:
                _height = height
            if width < _width:
                _width = width
        else:
            if height > _height:
                _height = height
            if width > _width:
                _width = width
        """if i > 50:
            break"""

    for i in range(len(img_array)):
        img1 = cv2.resize(img_array[i],(_width,_height),interpolation = cv2.INTER_CUBIC)
        img_array[i] = img1

写入视频

def images_to_video(Base_dir,paths):
    img_array = []
    for path in paths:
        #请根据实际情况修改要匹配的扩展名
        for filename in glob.glob(Base_dir + path + '/*.jpg'):
            img = cv_imread(filename)
            if img is None:
                print(filename + " is error.")
            img_array.append(img)    
    img_array,size = resize(img_array,'largest')
    fps = 1
    out = cv2.VideoWriter('demo.avi',cv2.VideoWriter_fourcc(*'DIVX'),fps,size)

    for i in range(len(img_array)):
        out.write(img_array[i])

    out.release()

主函数

def main():
    #qin请根据实际情况修改Base_dir
    Base_dir = './学习资料/'
    paths = os.listdir(Base_dir)
    images_to_video(Base_dir,paths)

if __name__ == '__main__':
    main()