我希望能够将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我们可以访问它的帧。然而,我无法找到如何将一系列图像放入动画中的方法。
我看到一些解决方案使用“images2gif”,但我想留在单一库中。
添加: 这里的答案没有回答我的问题。他们使用了我甚至无法通过pip安装的“gifmaker”库。
gifmaker
。 - RomanImage.save()
并带有特殊参数。这对你不起作用吗? - Reti43Image.save()
函数并设置save_all=True
选项之前,我首先需要弄清楚如何创建一个由多个帧组成的图像对象。将3D数组替换为3D数组列表是行不通的。 - RomanGifImagePlugin
,或者从images2gif中复制代码,将其保存为动画gif并重新加载到Image
对象中。我知道,这两种方法都不是理想的选择。 - Reti43