Python制作视频或GIF图片

需求
想要制作可以课上展示的动图或视频,视频最佳。

环境
VSCODE+PYTHON3

所需材料
视频所需要的图片(以微幅波为例),利用python 画图。
先画一个简单的波形图

VSCODE里动态显示
为了直观测试,首先需要在一个图框中展示图片的变化

所以查找相关资料,找到了这个博客:
https://blog.csdn.net/u013468614/article/details/58689735

简单来说是每次要清空画布,然后要有间隔:

f1= plt.figure(1)
for jt in range(100):
    for i in range(len(x)):
        eltax[i]=SMW_elta(A,k,x[i],sigma,t+jt/2)
    plt.clf() #清空画布
    plt.plot(x,eltax)
    plt.draw()
    plt.pause(0.005) #时间间隔
plt.show()

下一步,GIF生成
首先先把多张图进行输出
用的是输出函数

figname='path'+str(jt)+'.jpg'  #注意这边不要用[]
plt.savefig(figname)

然后将图片合成GIF
参考 https://blog.csdn.net/monotonomo/article/details/80586194
我先试了images2gif,结果图片都是闪烁的,还不如用imageio

# -*- coding: utf-8 -*-
# GIF generator

from PIL import Image 
import numpy as np
import imageio

outfilename='e:/python_code/Coast_Engineering/f1/SAW_eta_test.gif'
foldn='e:/python_code/Coast_Engineering/f1/SAW_eta'

filenames = []
for i in range(100):   # 读取100张图片
    filename = foldn+str(i)+'.jpg'    # path是图片所在文件,最后filename的名字必须是存在的图片 
    filenames.append(filename)              # 将使用的读取图片汇总
frames = []
for image_name in filenames:                # 索引各自目录
    im = Image.open(image_name)             # 将图片打开,本文图片读取的结果是RGBA格式,如果直接读取的RGB则不需要下面那一步
  #  im = im.convert("RGB")                  # 通过convert将RGBA格式转化为RGB格式,以便后续处理 
    im = np.array(im)                       # im还不是数组格式,通过此方法将im转化为数组
    frames.append(im)                       # 批量化

imageio.mimsave(outfilename, frames, 'GIF', duration=0.1)

测试生成视频
参考 https://blog.csdn.net/Bugest/article/details/81119980

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# MP4 generator

from PIL import Image 
import numpy as np
import os
import cv2
import time

outfilename= "e:/python_code/Coast_Engineering/SAW.mp4"#导出路径
foldn='e:/python_code/Coast_Engineering/f1/SAW_eta'

fps = 10 #帧率

size = (640,479) #图片的分辨率

#fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')
video = cv2.VideoWriter( outfilename, fourcc, fps, size )
filenames=[]
for i in range(100):   # 读取100张图片
    filename = foldn+str(i)+'.jpg'    # path是图片所在文件,最后filename的名字必须是存在的图片 
    filenames.append(filename)              # 将使用的读取图片汇总
frames = []

for item in filenames:
    img = cv2.imread(item)  #使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
    video.write(img)        #把图片写进视频
 
video.release() #释放


你可能感兴趣的:(Python,python,计算机视觉)