**我想出了如何创建电影,以便代码更改为反映正确的代码,以防将来对任何人有用。 此脚本创建一个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);
答案 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一直被覆盖所以你最多会得到最后一帧。