学习前言:

        最近在学习OpenCv播放视频,学习完毕后,神奇的发现:其实播放视频就是把视频中的图像一帧帧的抽取出来,按照一定的时间间隔展示罢了。 既然如此,那么我能不能逆向思维——倒过来?把一帧帧图片按照一定时间间隔轮流播放变成视频呢? 抱着这样的办法, 我尝试了实验,最后发现真的可以做得到,而且OpenCv也封装了这个函数,就是使用中有非常多的坑,但是我也一一填补,以下代码函数可以即拿即用!


【方便的Opencv】实现图片合成视频+附带图片生成gif

 将一个文件夹下的图片生成gif 


实现代码: 

'''
     fps:
     帧率:1秒钟有n张图片写进去[控制一张图片停留5秒钟,那就是帧率为1,重复播放这张图片5次] 
     如果文件夹下有50张 534*300的图片,这里设置1秒钟播放5张,那么这个视频的时长就是10秒
     '''

请确保每一张图片都是一样的大小,如果不是请手动resize至一致!

# -*- coding: UTF-8 -*-
import os
import cv2
import time


# 图片合成视频
def picvideo(img_path, size):
    filelist = os.listdir(img_path)  # 获取该目录下的所有文件名
 
    fps = 24
    video_path = os.path.join('Package\\video', img_path.split('\\')[-1] + ".avi")  # 导出路径
    # 可以用(*'DVIX')或(*'X264'),如果都不行先装ffmepg
    fourcc = cv2.VideoWriter_fourcc('I','4','2','0')  # 不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
    video = cv2.VideoWriter(video_path, fourcc, fps, size, True)

    for i in range(len(filelist)):
        item = os.path.join(img_path, str(i)+'.png')
        img = cv2.imread(item)  # 使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
        video.write(img)  # 把图片写进视频

    video.release()  # 释放
    print('video_path:', video_path)
    return video_path

def main(img_path):

    img_list = os.listdir(img_path)

    img = cv2.imread(os.path.join(img_path, img_list[7]))
    w, h, _ = img.shape
    return picvideo(img_path, (h, w))  # 尺寸要调转,挖槽,坑死他爹地我了

if __name__ == '__main__':
    main('Package\Origrial\\tds_nm_01')

 将一个文件夹下的图片生成gif 

'''
 import osimport imageio
 def create_gif(img_path, gif_name, duration = 1.0):
     '''
     :param image_list: 这个列表用于存放生成动图的图片
     :param gif_name: 字符串,所生成gif文件名,带.gif后缀
     :param duration: 图像间隔时间
     :return:
     '''
     frames = []
     for image_name in os.listdir(img_path):
         temp = os.path.join(img_path, image_name)
         print(temp)
         frames.append(imageio.imread(temp))    imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
     returndef main():
     #这里放上自己所需要合成的图片文件夹路径
     image_path = r'C:\Users\86137\Desktop\gaitRecognition_platform\Package\Fgmask\tds_nm_03'
     gif_name = 'new.gif'
     duration = 0.08        # 播放速度yuexiaoyuekuai
     create_gif(image_path, gif_name, duration)if __name__ == '__main__':
     main()


 

完毕! 

        最后说一声,Opencv的学习之路漫漫,希望我们能一起加油,共同进步!最后的最后,如果这篇文章有帮助到大家,麻烦点赞+收藏一下!