分享

教你利用5行Matlab代码创建动态视频!

 伊伊爸 2022-08-29 发布于湖北

图片

在某些场合下,我们可能需要展示动态图,特别是在科技论文的附录材料中比较常见。

比如对于,我们想展示不同的相位角对函数波形有何影响,那么利用动态图会看得更直观👇

图片
sin(x+phi)波形受相位的影响动态图

下面向读者介绍如何利用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,运行得到:

图片
100/10=10秒

增加帧数,设置myVideo.FrameRate=50,运行得到:

图片
100/50=2秒

总之,我们可以通过改变帧数,来使得动图比较'迟缓'或者比较'丝滑'.

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多