我希望能够将 numpy 数组转换为图像。首先,我学习了如何将 3D(高 x 宽 x 颜色
)数组转换为图像。经过一些研究,我认为 PIL(或 Pillow)是最自然的方式。这就是我目前的做法(而且效果很好):
from PIL import Image
import numpy as np
if __name__ == '__main__':
h = 4
w = 8
arr = np.zeros((h,w,3), dtype=np.uint8)
arr[0, 0, :] = [255,255,0]
arr[3, 7, :] = [0,255,0]
img = Image.fromarray(arr, 'RGB')
img.save('viz.png')
作为下一步,我希望能够获取 3D 数组(或 4D 数组,其中时间是附加维度)的列表并生成相应的动画。所以,到目前为止我还没有找到如何去做。
看起来 Pillow 能够读取 gif 动画。使用 ImageSequence 我们可以访问它的帧。但是,我不知道如何将一系列图像放入动画中。
我看到一些使用 ìmages2gif
的解决方案,但我想继续使用单个库。
已添加
答案 here不要回答我的问题。他们使用我什至无法通过 pip 安装的 gifmaker
库。
最佳答案
因此,问题的主要反对意见是在不使用工具的情况下生成由 3D 数组(帧)列表或 4D 矩阵(以宽度、高度、颜色和时间作为维度)表示的 gif 动画是 Python 的“外部”。
看起来 PIL 库无法做到这一点。至少在没有黑客攻击或解决方法的情况下,不是以一种简单的方式。但是,可以通过使用 moviepy
库来实现该目标。这是这个库提供的优雅解决方案:
import numpy as np
import moviepy.editor as mpy
def make_frame(t):
h = 100
w = 100
ar = np.zeros((h, w, 3))
for hi in range(h):
for wi in range(w):
for ci in range(3):
ar[hi, wi, ci] = 255.0*t/15.0
return ar
if __name__ == '__main__':
clip = mpy.VideoClip(make_frame, duration=15.0)
clip.write_gif('ani.gif', fps=15)
关于python - 是否可以仅使用枕头库生成 gif 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36401912/