• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Matlab如何制作和保存gif动图

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  很多时候我们并不只是想在Matlab中把图动态显示一下给自己看,而是需要将它保存为gif(为什么是gif呢?因为其小巧方便,容易嵌入到其他东西中),从而用以汇报说明,或者其他用途。
  之前很长一段时间,我嫌matlab保存gif要改动的代码比较多(Mathematica只要在Animate时,将Animate改成Export就直接出图了),都是利用gif动画录制工具(推荐灵者Gif录制),在matlab图在跑的时候,给它录成gif。
后来,需要的从matlab中搞出来的gif越来越多了,深感录制方法的琐碎,便又想到了利用Matlab自身函数,将参数递变绘制的多张图,保存为gif动图。
  一个简洁而基本的框架如下:

 1 clc
 2 clear
 3 pic_num = 1;
 4 for ***************************
 5     plot(fig(i));%以上代码为画图代码,以下代码为保存gif的代码
 6   
 7     drawnow;%画gif动图的时候这个外面的大for循环就存在,直接把以下和for*******以上的代码放到对应的位置即可
 8     F=getframe(gcf);
 9     I=frame2im(F);
10     [I,map]=rgb2ind(I,256);
11 
12     if pic_num == 1
13         imwrite(I,map,\'test.gif\',\'gif\',\'Loopcount\',inf,\'DelayTime\',0.2);
14     else
15         imwrite(I,map,\'test.gif\',\'gif\',\'WriteMode\',\'append\',\'DelayTime\',0.2);
16     end
17 
18     pic_num = pic_num + 1;
19 
20 end  % 这里imwrite写入时,要保证原来已经有一个文件存在,才能用“append”参数,所以设置了一个pic_num,让一张图直接保存,后面用“append”。

  举个例子:

 1 clc
 2 clear all;
 3 tic
 4 pic_num = 1;
 5 A = 10;
 6 B = 0.5*A;
 7 t = 0:0.01:2;
 8 x = 0:0.1:40;
 9 omega = 10*pi;
10 k = pi/4;
11 for m = 1:length(x)
12     y1 = A*cos(k*x(m) - omega*t);
13     y2 = B*cos(k*x(m) + 0.3*omega*t);
14     figure(2)
15     plot(t,y1+y2);
16     xlabel(\'t\')
17     ylabel(\'y\')
18     title(\'Freezed time figure\')
19     ylim([-(A+B+1),A+B+1])
20     pause(0.2);
21     
22     drawnow;
23     F=getframe(gcf);
24     I=frame2im(F);
25     [I,map]=rgb2ind(I,256);
26     if pic_num == 1
27         imwrite(I,map,\'test1.gif\',\'gif\',\'Loopcount\',inf,\'DelayTime\',0.2);
28     else
29         imwrite(I,map,\'test1.gif\',\'gif\',\'WriteMode\',\'append\',\'DelayTime\',0.2);
30     end
31     pic_num = pic_num + 1;
32 end
33 toc

 

 1 x = 0:0.01:1;
 2 n = 3;
 3 y = x.^n;
 4 plot(x,y,\'LineWidth\',3)
 5 title([\'y = x^n,  n = \' num2str(n) ])
 6 n = 1:0.5:5;
 7 nImages = length(n);
 8 
 9 fig = figure;
10 for idx = 1:nImages
11     y = x.^n(idx);
12     plot(x,y,\'LineWidth\',3)
13     title([\'y = x^n,  n = \' num2str( n(idx)) ])
14     drawnow
15     frame = getframe(fig);
16     im{idx} = frame2im(frame);
17 end
18 close;
19 %%
20 figure;
21 for idx = 1:nImages
22     subplot(3,3,idx)
23     imshow(im{idx});
24 end
25 %%
26 filename = \'testAnimated.gif\'; % Specify the output file name
27 for idx = 1:nImages
28     [A,map] = rgb2ind(im{idx},256);
29     if idx == 1
30         imwrite(A,map,filename,\'gif\',\'LoopCount\',Inf,\'DelayTime\',1);
31     else
32         imwrite(A,map,filename,\'gif\',\'WriteMode\',\'append\',\'DelayTime\',1);
33     end
34 end

 

关于MATLAB中的imwrite的用法

imwrite(imind,cm,\'gif\',\'comet2.gif\', \'Loopcount\',inf,\'DelayTime\',0.1);
这句代码每一个逗号都到底什么意思
能详细解释一下吗
inmind,cm,应该是bai你输出du图片之前定义的[inmind,cm]吧。输出的图片形式为gif图片,名字是comet2.gif。 loopcount,inf 可以让这个gif文件zhi一直播放。delaytime是播dao放时间控制。

参考网址:(Matlab如何制作和保存gif动图https://blog.csdn.net/lusongno1/article/details/78632457

     (matlab生成gif动图)https://blog.csdn.net/hezhongla0811/article/details/86368363?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

                  (matlab drawnow命令 刷新屏幕)https://blog.csdn.net/qq278672818/article/details/62038599

      (关于MATLAB中的imwrite的用法)https://zhidao.baidu.com/question/1370259502588323739.html

     (imwrite将图像写入图形文件)https://ww2.mathworks.cn/help/matlab/ref/imwrite.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi实现自动填写表单和调用网页上的函数发布时间:2022-07-18
下一篇:
《Delphi算法与数据结构》简介及下载发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap