我試圖找出如何使用Mayavi的創建3D繪圖導出到一個電影,我可以在PowerPoint等使用的演示,我發現這樣做使用moviepy的討論在動畫Mayavi的與moviepy
http://zulko.github.io/blog/2014/11/29/data-animations-with-python-and-moviepy/
我使用這種代碼,稍作修改如下
duration = 6
def make_frame(t):
u = np.linspace(0,2*np.pi,360)
y = np.sin(3*u)*(0.2+0.5*np.cos(2*np.pi*t/duration))
pore_surface.mlab_source.set(y = y)
mlab.view(azimuth= 360*t/duration, distance=200)
.
.
.
verts, faces = marching_cubes(large_region, 0.5, (1., 1., 1.))
surface_area = mesh_surface_area(verts, faces)
pore_surface = mlab.triangular_mesh([vert[0] for vert in verts],[vert[1] for vert in verts],[vert[2] for vert in verts],faces)
mlab.show(pore_surface)
animation = mpy.VideoClip(make_frame, duration=duration).resize(0.5)
animation.write_videofile("pore_surface.mp4", fps=20)
animation.write_gif("pore_surface.gif", fps=20)
其中marching_cubes是從scikits圖像
但是,我收到廣播錯誤,如下所示 (每個新值有360個值)
對象的特徵通知處理程序發生異常:,trait:y,old value:[0.0 1. ...,62.5 63. 63.],新值:[0.00000000e + 00 3.67371235e-02 7.33729915e-02 1.09806628e-01 1.45937613e-01 1.81666362e-01 2.16894399e-01 2.51524628e- 01 ...
回溯(最近通話最後一個): 文件 「/Users/iz9/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/traits/trait_notifiers.py」 340行,致電 自己.handler(* args) 文件「/Users/iz9/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/mayavi/tools/sources.py」,第835行,在_y_changed self.points [:,1] = y.ravel() ValueError:無法將形狀(360)中的輸入數組廣播到形狀中(43505) 錯誤:特徵:對象的traits通知處理程序中發生異常:,trait:y,舊值:[0. 0.1 ... 62.5 63.63],新值:[0.00000000e + 00 3.67371235e-02 7.33729915e-02 1.09806628e-01 1.45937613e-01 1.81666362e-01 2.16894399e -01 2.51524628e-01 。 。 。 這重複了很多次。與此同時,Mayavi場景確實顯示,並且它確實顯示圖像正在旋轉,而此錯誤仍在繼續。
我在Mac上的Enthought Canopy下運行Python。