Python-OpenCV实现图片和视频相互转换的简单+实用方法(附代码)

近两天刚好需要操作图片转视频,视频转图片小操作,在网上搜了一些博文发现会存在一些小bug。因此,在这里记录一下直接调好就可以使用的代码。

首先是图片转视频(使用对象:尺寸大小都一样的图片)

import os
import cv2
import numpy as np

path = './Output/'  # 路径设置(ps:路径千万不要出现中文!)
filelist = os.listdir(path)
filelist = sorted(filelist)  # 按照文件数字进行顺序排序

fps = 2  # 视频每秒24帧
size = (512, 512)  # 需要转为视频的图片的尺寸

video = cv2.VideoWriter("VideoTest.avi", cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
# 视频保存在当前目录下

for item in filelist:
    if item.endswith('.png'):
        # 找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它
        item = path + item
        img = cv2.imread(item)
        video.write(img)

video.release()
cv2.destroyAllWindows()

然后,还是图片转视频,使用对象改变(使用对象:图片尺寸大小不同)

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 + '/*.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 = 2    # 帧率设置
    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():
    path = ".Output/"    # 路径(千万不要带中文的路径!!!)
    images_to_video(path)


if __name__ == "__main__":
    main()

最后,我们来个视频转图片的代码!

import cv2
import numpy as np


# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 图片名字的后缀,int 类型
def save_image(image, addr, num):
    address = addr + str(num) + '.jpg'
    cv2.imwrite(address, image)


# 读取视频文件
videoCapture = cv2.VideoCapture("./232.avi")

# 读帧
success, frame = videoCapture.read()
i = 0
timeF = 40
j = 134
while success:
    i = i + 1
    if (i % timeF == 0):
        j = j + 1
        save_image(frame, '.\\0', j)
        print('save image:', i)
    success, frame = videoCapture.read()

好了,现在我们就已经可以实现图片与视频互相转换啦~~

参考链接:
图片转视频1
图片转视频2

你可能感兴趣的:(python,opencv)