用python把多张图片合成为视频

import time
import cv2
import glob


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

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

    return img_array, (_width, _height)


def images_to_video(path):
    img_array = []

    # for filename in glob.glob(path + '/*.jpg'):
    for filename in glob.glob(path + '/*.*'):  # 这包括所有文件,即包含(jpg、bmp、png)
        img = cv2.imread(filename)
        if img is None:
            print(filename + " is error!")
            continue
        img_array.append(img)

    # 图片的大小需要一致
    img_array, size = resize(img_array, 'largest')
    fps = 0.2  # 0.1表示一张图片播放10s,0.2表示一张图片播放5s
    out = cv2.VideoWriter(path + 'demo' + str(int(time.time())) + ".avi", cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
    # 这样不会出现重名而导致覆盖或报错
    '''
    视频编码参考:
    CV_FOURCC('P','I','M','1') = MPEG-1 codec
    CV_FOURCC('M','J','P','G') = motion-jpeg codec
    CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
    CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
    CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
    CV_FOURCC('U', '2', '6', '3') = H263 codec
    CV_FOURCC('I', '2', '6', '3') = H263I codec
    CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
    '''
    for i in range(len(img_array)):
        out.write(img_array[i])
    out.release()


def main():
    # path = "../pictures/test/"
    path = 'D:\imgs\\'
    # path = 'D:\我的文档\图片收藏\imgs\\'  # 文件路径和图片名都不要出现中文,否则报错。
    images_to_video(path)


if __name__ == "__main__":
    main()

'''ps.文件路径和图片名都不要出现中文,否则视频可能合成错误。'''

本人是参考其他博主代码进行修改。能够识别文件夹中所有文件,自动判别图片格式,并以其中最大图片size作为视频size。

你可能感兴趣的:(功能小程序,python,opencv,cv)