基于Python的GIF生成实例

前言

前一段时间在做神经网络训练时最终的拟合训练过程想用GIF表示出来,但是网上的GIF MAKER比较麻烦不想用,手里只有上百张图片,这要怎么办呢,总不能PPT一张一张拖进去吧,因此想要用我们熟悉的Python来完成这个任务。

基于imageio的GIF生成

关于imageio

我们大多数时间使用Python其实只需要最终的图片结果,因此对matplotlib库的接触了解比较多,很少听过imageio库,那么imageio库是用来干嘛的呢:

  • Python专门用来处理图片的第三方库,在matplotlib用来产生图片的同时,imageio用来高效处理图片。
  • 可以有效处理各种静态格式,BMP、JPG、PNG,甚至占据存储空间极大的PPM也可以轻松处理。
  • 我们最期待的GIF动图模式也可以轻松拿捏,作为编程语言,相较于百度而来的软件,自己用着放心。
  • 命令极其简单,上手仅需十分钟。

基于imageio生成GIF实战

之前的博客中我详细讲解了椭圆形偏微分方程从离散到算法的数值解法过程,最终也给出了源码,大家可以很直观的感受到最终得到了板凳形的稳态形状,但这样就够了吗,我们是不是还要了解一下它的动态过程,在给定初始条件下,这个物理过程是怎么演化的呢,以下给出答案:

椭圆形方程数值解法

我们先把偏微分方程数值解简单过一下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

for iteration in range(100):
    for i in range(1,100):
        for j in range(1,100):
            u[i,j] = w/4 * (u[i-1,j] + u[i+1,j] + u[i,j-1] + u[i,j+1]) + (1-w) * u[i,j]
    xl = np.linspace(0, 1, 101)
    yl = np.linspace(0, 1, 101)
    X, Y = np.meshgrid(xl, yl)
    fig = plt.figure(iteration)
    ax = Axes3D(fig)
    surf = ax.plot_surface(X, Y, u, cmap=plt.cm.Blues)
    fig.colorbar(surf, shrink=0.5)
    plt.savefig(str(iteration) + '.png')

相较于之前博客中所描述的不同之处在于,我们每一时间步长都要生成一次结果图,并通过plt.savefig命令将其保存,这样我们就得到了想要被合称为GIF的原始静态图片。

GIF生成

下面就是最重要而且简便的GIF生成阶段:

import imageio

先引入第三方库,安装直接cmd命令行输入pip install imageio即可。

def compose_gif():
    img_paths = [str(i) + '.png' for i in range(100)] #+ ['0'+str(j)+'.png' for j in range(10,50)]
    gif_images = []
    for path in img_paths:
        gif_images.append(imageio.imread(path))
    imageio.mimsave("process.gif",gif_images,fps=10)

之后直接构造一个GIF生成函数compose_gif(),首先引入图片地址,按照之前生成的PNG格式与命名方式引入即可,之后生成包含所有静态图片的gif_images列表,最终通过.mimsave命令将图片列表生成名为process.gif的动态图,其中fps表示的是我们所想要的GIF帧率。

compose_gif()

最终直接调用该函数,完成GIF生成过程,下面上结果:

在这里插入图片描述
(由于CSDN单张图片上传有大小限制,只能将图片处理成上述情况,有点小但也可以看清)。

由此我们即完成了显示由初始时刻到终止时刻偏微分方程解的变化情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值