2015-09-02 88 views
3

我試圖找出如何使用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。

回答

-1

我不知道什麼影片在做什麼,我從來沒有用過影片。

我懷疑它可能在概念上類似於我熟悉的方法。

我知道有兩種方式可以用mayavi創建不同種類的電影。他們都使用外部工具,如ffmpeg。

  1. 使用例如mlab.savefig,然後使用ffmpeg等工具將它們連接在一起。 (我懷疑電影是這樣做的)

  2. 在mayavi中使用例如動畫設置動畫。 @mlab.animate並使用工具(如ffmpeg -i x11grab)捕獲屏幕輸出。

我對這兩種方法都取得了成功。對於使用方法#1的一些(密集)示例代碼,請參閱pysurfer。有關方法二的一些示例代碼,請參閱cvu

0

望着錯誤消息,似乎Mayavi的有問題發生的情景,也許你的網面的問題,三角網等

你有沒有試着用不同的參數生成現場,沒有MoviePy ,看看它是否有效?