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

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

学习前言:


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


实现代码:


 '''

   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


'''

Author:

Email:

公众号:

'''


import os
import 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)
    return
def 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的学习之路漫漫,希望我们能一起加油,共同进步!最后的最后,如果这篇文章有帮助到大家,麻烦点赞+收藏一下!


1dc618a0ed9580ce8bfa6facb208c08f.png

相关文章
|
21天前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.13图片冷白皮(美白)处理
OpenCV这么简单为啥不学——1.13图片冷白皮(美白)处理
25 0
|
22天前
|
存储 编解码 监控
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
24 0
|
22天前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
26 0
|
2月前
|
计算机视觉 Python
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
36 0
|
28天前
|
存储 监控 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
28 0
|
22天前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
8 0
|
22天前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.2、图片截取(数组截取)
OpenCV这么简单为啥不学——1.2、图片截取(数组截取)
10 0
|
28天前
|
算法 API 开发工具
Baumer工业相机堡盟工业相机如何使用BGAPISDK和OpenCV生成视频(C++)
Baumer工业相机堡盟工业相机如何使用BGAPISDK和OpenCV生成视频(C++)
22 0
|
1月前
|
计算机视觉 Python 索引
【Python Opencv】图片与视频的操作
【Python Opencv】图片与视频的操作
【Python Opencv】图片与视频的操作
|
2月前
|
机器学习/深度学习 算法 计算机视觉
python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作
python入门(六) opencv的安装,图片操作,绘制文字图形,视频操作

热门文章

最新文章

相关产品