Python 使用imageio保存三维打印

Python 使用imageio保存三维打印,python,image,numpy,matplotlib,python-imageio,Python,Image,Numpy,Matplotlib,Python Imageio,我想将3D打印保存为gif格式。但是,由于我无法解释的原因,以下代码不起作用。我收到错误消息:使用imageio.mimsave(…)时,图像必须是2D(灰度、RGB或RGBA),但我将图像保存为RGB: import numpy as np import matplotlib.pyplot as plt import imageio x = [0,1,0,0] y = [0,0,1,0] z = [0,0,0,1] fig = plt.figure(figsize=(15,9)) ax =

我想将3D打印保存为gif格式。但是,由于我无法解释的原因,以下代码不起作用。我收到错误消息:
使用
imageio.mimsave(…)
时,图像必须是2D(灰度、RGB或RGBA)
,但我将图像保存为RGB:

import numpy as np
import matplotlib.pyplot as plt
import imageio

x = [0,1,0,0]
y = [0,0,1,0]
z = [0,0,0,1]

fig = plt.figure(figsize=(15,9))
ax = fig.add_subplot(projection='3d')
ax.scatter(x,y,z,s=1500)

images = []
for n in range(0, 100):
    if n >= 20: 
        ax.azim = ax.azim+1.1 
    fig.canvas.draw()
    image = np.frombuffer(fig.canvas.tostring_rgb(), dtype='uint8')
    images.append(image)
   
imageio.mimsave('test.gif', images)


np.frombuffer
返回一个平面数组,其形状
(X*Y*3,)
,相反,
imageio
需要一个Y×X×3(或者对于RGBA缓冲区可能是×4)。您必须
重塑您的
图像

In [43]: import numpy as np
    ...: import matplotlib.pyplot as plt
    ...: import imageio
    ...: 
    ...: x = [0,1,0,0]
    ...: y = [0,0,1,0]
    ...: z = [0,0,0,1]
    ...: 
    ...: fig = plt.figure(figsize=(5, 3)) # @100 dpi it's 500×300 pixels
    ...: ax = fig.add_subplot(projection='3d')
    ...: ax.scatter(x,y,z,s=500)
    ...: 
    ...: images = []
    ...: for n in range(0, 25):
    ...:     if n >= 15:
    ...:         ax.azim = ax.azim+1.1
    ...:     fig.canvas.draw()
    ...:     image = np.frombuffer(fig.canvas.tostring_rgb(), dtype='uint8')
    ...:     images.append(image.reshape(300, 500, 3)) ## Y×X
    ...: 
    ...: imageio.mimsave('test.gif', images)
    ...: 

In [44]: ls -l test.gif
-rw-r--r-- 1 boffi boffi 825988 May 21 19:46 test.gif

In [45]: 


请注意,我已经修改了尺寸和帧数,使其具有更小的GIF。

我下面的答案是,它在现场吗?