在某些场合下,我们可能需要展示动态图,特别是在科技论文的附录材料中比较常见。 比如对于,我们想展示不同的相位角对函数波形有何影响,那么利用动态图会看得更直观👇 下面向读者介绍如何利用matlab得到上述动态图(视频)。核心代码仅需5行!!! (更多有趣动图可以点击往期推文: 新年祝福千篇一律?看看Matlab如何制作高级祝福文案 Matlab里面烟花表演有多炫酷?)
生成视频的基本步骤Matlab中创建动态视频,基本思想就是要把你的图窗中的每一幅静态图都“截取”在一个视频文件里面。 首先使用指令 myVideo=VideoWriter(filename) 创建新的视频文件myVideo .
其中,filename 是自己定义的视频文件名(最后你得到的视频文件即为:filename.avi的格式) 紧接着按照:'打开文件👉写入视频的每一帧👉关闭文件'的顺序完成动态视频的创建. 用到指令: open(myVideo) % 先要把文件open
Fr=getframe(gcf); % 获取当前图窗的“截图”
writeVideo(myVideo,Fr); %将获取的图窗截图write到你创建的视频文件中
close(myVideo) % 最后把文件close.
OK!基本过程就这样。下面我们看下如何在每一次循环中抓取图窗,完成动态视频创建。 简单的案例,我们想看下相位角范围内波形的变化情况。 首先我们需要将内的相角均匀分点(这里取100个)。然后对这每一个,我们在图窗中绘制的函数曲线。接着利用getframe(gcf) 函数获取当前图像的“截图”,再将截图写入创建的视频文件即可。 利用一次for循环,详见代码: figure % 创建图窗 myVideo=VideoWriter('VideoFile_test'); % 指定视频文件名 open(myVideo) % open开始写入
x=0:0.01:2*pi; $ 函数曲线绘图范围
for i=1:100 plot(x,sin(x+i/100*2*pi),'LineWidth',2); pbaspect([1 1 1]) % 设置正方形图窗 xlabel('x') ylabel('y') title(['\phi=',num2str(i/100),'*2\pi']) drawnow % 即时显示当前图窗 Fr=getframe(gcf); % 抓取图窗 writeVideo(myVideo,Fr); % 写入文件 end close(myVideo) % close文件,结束
运行后可以看见matlab窗口左边“当前文件夹”下面出现刚刚得到的视频文件: 打开即可得到动态波形: 一些设置控制视频的长短可以通过调节“帧数”来实现,你一定知道,视频是由一帧一帧的静态图拼接而成,视频的”帧数“其实就是每秒钟显示多少张图。显然: 每秒显示一张图,视频会很长,会失去”动态“的感觉; 每秒显示一百张图,视频会很'丝滑',但视频比较短。 添加指令: myVideo.FrameRate=num
可以指定视频帧数为num (默认为30)。总的循环数100,每秒显示num,那么显然视频长度即为 100/num 秒。
例如,我们减少帧数,设置myVideo.FrameRate=10 ,运行得到: 增加帧数,设置myVideo.FrameRate=50 ,运行得到: 总之,我们可以通过改变帧数,来使得动图比较'迟缓'或者比较'丝滑'.
|