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

Это потому, что 'Р (к) = GetFrame (ГКМ)' находится внутри внутреннего контура, а это означает, что каждый раз через внешний цикл '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. Initialized вашу 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 
Смежные вопросы