MATLAB创建电影

时间:2013-07-01 16:55:32

标签: matlab movie

**我想出了如何创建电影,以便代码更改为反映正确的代码,以防将来对任何人有用。 此脚本创建一个eqdconic地图的电影,并以avi格式保存。电影将播放1255帧。它还在图像的某个点上绘制一个点,在电影上放置一个更改的标题以显示正在运行的月份,并在右侧有一个颜色条。

使用的一些变量是在别处创建的。用于创建它们的代码被遗漏以压缩代码(因为它们对我以外的任何人都没用)。

% Create movie
    nFrames = 34; % Number of frames

for k = 1:nFrames
    % Eqdconic script    
    % Define figure and axes
    fg1 = figure(1);
    axesm('MapProjection','eqdconic', 'MapParallels', [], 'MapLatLimit',[-80 -59],'MapLonLimit',[190 251]) % 60-70S and 120-160W
    framem on; gridm on; mlabel on; plabel on; hold all;

    % Plot data
    frame = dataPoint_movie(:,:,k);
    image = contourfm(lat,lon,frame, 'LineStyle', 'none');

    hold on

    % Plot dot    
    plotm(-66.75,224,'k.','MarkerSize',30); 

    % Colorbar
    caxis([0 100]); 
    h = colorbar;
    ylabel(h,'Percent');

    % Title: Days 1:1258 inclusive. 20100101 to 20130611
    date = datenum(2009, 12, 31) + k; % Convert t into serial numbers
    str = datestr(date, 'mmm yyyy'); % Show in the format mmm yyyy so title changes only once a month
    title(str);

    mov(k) = getframe(gcf); % gca would give only the image. gcf places the title and other attributes on the movie.
end

close(gcf)

% % Save as AVI file 
movie2avi(mov, 'SeaIceConcentration.avi', 'compression', 'none', 'fps', 2); 

2 个答案:

答案 0 :(得分:1)

我更喜欢将我的电影从matlab导出到.avi文件。

在for循环之前

,初始化你的电影:

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

然后在for循环中获取你的框架:

A = getframe;
writeVideo(vidObj,A);

(注意,我没有将每个帧保存在矩阵中,因此A是MxN矩阵)

然后在for循环后写出你的电影

 close(vidObj);

电影将在您当前的工作目录中。你可以使用quicktime或其他avi播放器打开。要更改影片的帧速率(速度),请编辑第二行代码。 23 fps是一个很好的平滑电影帧速率。

答案 1 :(得分:1)

检查陈述的一致性:

A = dataPoint(:,:,t);

A(i) = getframe;

A一直被覆盖所以你最多会得到最后一帧。