2013-06-01 80 views
0

我想在matlab中製作電影。從matlab輸出電影

for i=1:runs; 
     for k=1:NO_TIMES 
     B = 0; 
     [conf dom_size] = conf_update_massmedia(time(k),conf); 


     shortconf=conf(1:N); 
     for j=1:N; 
     sigma(j,1:N) = conf(1+(j-1)*N:j*N); 
     end 
    figure(1) 
    imagesc(sigma); 
    colorbar; 
    set(gcf,'PaperPositionMode','auto'); 
    F(k)=getframe(gcf); 
    end 

end 

movie2avi(F,'B=0.avi','Compression','none') 

所以我的問題是,我只能從循環的最後運行得到了電影,我試圖移動周圍的數字代碼,但似乎沒有任何工作,是否有任何人誰能夠幫幫我?

帕爾

+2

這是因爲'F(k)的=的getFrame(GCF)'是內環內,這意味着通過外循環每次'F'被覆蓋。 – tmpearce

回答

0

movie2avi是在各種操作系統上有點過時和鬥爭。一個更好的選擇是使用VideoWriter命令:

vidObj = VideoWriter('B=0.avi'); 
vidObj.FrameRate=23; 
open(vidObj); 

for i=1:runs; 
    for k=1:NO_TIMES 
     B = 0; 
     [conf dom_size] = conf_update_massmedia(time(k),conf); 
     shortconf=conf(1:N); 

     for j=1:N; 
     sigma(j,1:N) = conf(1+(j-1)*N:j*N); 
     end 

     figure(1) 
     imagesc(sigma); 
     colorbar; 
     set(gcf,'PaperPositionMode','auto'); 

     F=getframe(gcf); 
     writeVideo(vidObj,F); 
    end 
end 

close(vidObj); 
1

如@tmpearce提到的那樣,問題是因爲覆蓋F基質。

我建議你:

  1. 初始化你F矩陣。
  2. 始終縮進代碼以使其可讀(例如,參見here)。

這是百萬的解決方案之一:

f_ind = 1; % Frame index. 
F = zeros(runs * NO_TIMES, 1); % initialization of Frames matrix. 
figure; % remove figure(1) from your inner loop haowever. 
for i = 1:runs; 
    for k = 1:NO_TIMES 
     % ... 
     F(f_ind)=getframe(gcf); 
     f_ind = f_ind + 1; 
    end 
end