2013-06-01 53 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