从matlab导出电影

时间:2013-06-01 17:47:26

标签: matlab loops movie

我正在尝试用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 个答案:

答案 0 :(得分:1)

正如@tmpearce所提到的,问题是因为覆盖了F矩阵。

我建议你:

  1. 初始化了您的F矩阵。
  2. 始终缩进代码以使其可读(例如,请参阅here)。
  3. 这是百万解决方案之一:

    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
    

答案 1 :(得分: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);