找回密码
 注册
关于网站域名变更的通知
查看: 669|回复: 1
打印 上一主题 下一主题

学习用matlab制作GIF动画(png转gif)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-16 16:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
目标:将三幅图(png格式)制作成GIF# O# \6 n6 ]1 m' N. w

5 o9 `7 S, ^9 S1 [2 W& P, {准备材料:三幅png格式的图& }; }! |: N3 g% _- Y0 [
& E, Z2 j: V- z( U" L- Z% \2 v
; K% w1 f4 ^( J+ Z4 b4 r7 k
: I$ M" b9 i9 T6 P! x% _, C
gif展现一个动态由悲到喜的过程5 Q0 i5 \, o, y# s, s5 g# }- d. e  D5 a

. A& f; b* d) K% H* w实现代码:
$ W* B4 j8 i- F- }" F8 `- c# l. I$ i1 H* l
`%预定义变量
* O, g/ k3 A7 M6 p, O% lPicture_save = {0};                                                        
' O- p3 K2 t2 K5 i3 t%初始化提高效率
8 _6 B) M  g2 d8 X5 N- {filename = 'myGIF.gif';! k8 I. |( z! j5 G! b

3 ]( }5 }2 A) @/ W2 t+ p  B
$ ~' d  ?1 O. I. t! S, X$ ^; _+ V%图像获取,图像类型转换
! T6 Y' T- x! w9 h[P1, map]  = imread('1.png');     8 h  K8 M6 [$ _& x4 \% O0 v7 ]0 {; [
picture1 = ind2rgb(P1,map);                                                
# F$ V( m* s7 o% _+ K/ N%索引图必须转换为真彩图,否则颜色不对; G. E! p- |7 u
[P2, map]  = imread('2.png');0 N! w4 d4 C! M$ d
picture2 = ind2rgb(P2,map);: e5 h2 n# _0 S" i0 L) b. S4 t
[P3, map]  = imread('3.png');
# e5 t1 S) d8 c7 A5 |picture3 = ind2rgb(P3,map);
3 @# u; Q7 x. E5 Q' U& l8 W4 X
$ U3 J* j8 M( n& R4 }array = [{picture1}, {picture2} ,{picture3}];                              
& R/ O! V' f( M, G3 k, L%方便循环  
/ v& u. ]* H# d
  I$ A% P$ r* k; S) m%保留帧数据9 @1 F) m- ^( U; `
for idx = 1:31 T/ G$ N: u7 @% O& ~1 }: B. m
    figure(idx)
% G: G8 `$ T# u+ B% B    imshow(array{idx});                                                   
, Z9 O" M" V& [3 o    %索引图转换为真彩图 ,{}访问数组里面的类型 ()访问元胞类型     
$ i7 x! \( ]! r# B    Picture_save{idx} = frame2im(getframe(idx));                           / Q3 S  E' Q: Q. V3 ~: R( S0 V
    %获取figure(idx)展示的效果,将其以图片数据保存! ~0 m9 J" c$ N5 I3 E2 A3 s
    close all
2 ~5 r$ S- y4 g# F) s4 W% _3 [end
4 ~: p) l8 M' C! f4 \/ u- h9 |2 V% v- a! Z) H, z* `  F/ ^
%制作GIF& V* p$ V' }3 [2 \6 `7 Z
%有个bug 在第一次播放的时候没有中间的那一帧,之后又有了- A/ Q+ O( I7 X* Z$ _3 G8 p
for idx = 1:3
1 R3 r0 t" H* X; l/ B5 ~    [A,map] = rgb2ind(Picture_save{idx},256);                              
2 e3 B9 h9 C2 A# c0 Q7 K    %imwrite不能显示三维图像,所以要进行转换% Q/ G2 z7 n+ ~7 I
    if idx == 1
' P1 f& `# g% B+ G& g3 a2 h; J        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.5);   
! @) U8 {' j5 Z3 i         %Inf 无限循环# r" M7 r4 ]0 E$ ?& p- J* n
    else  z1 n. Z: A+ X) z% A: V
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.5);# b9 `' e$ @6 N: ^
    end# A* G9 z; g3 z0 H1 E. |, J
end
* a6 j  _7 {' k: _+ Z$ Y7 S6 {
' t4 t, l# A/ ?5 w7 Y" v4 R. I+ aclose all`/ F5 M) ^8 I: n, i, s

' L( b8 T$ i" {3 q" b, M
1 [7 f' m6 G9 `8 v以下是代码的截图2 H3 F5 L& b/ ^5 ]4 C- c

  `5 K# s! k" W4 l; F: }8 B   W& G, I  n5 s5 V! x( A
- U* K- J; T4 _" j2 c5 l8 ]3 A: n$ h+ ~8 q
当然了,还有更简单的办法:
2 `( n: N5 c+ J" J
+ f: D; a8 V0 ~! B# E& mfor idx = 1:3
0 B( t- t8 V, o; M8 m  l    [A,map] = imread(strcat(num2str(idx),'.PNG'));                              %imwrite不能显示三维图像,所以要进行转换/ y- n) C6 l, D0 U* b: ~
    if idx == 1' q8 j' a8 w$ U( O
        imwrite(A,map,'new.gif','LoopCount',Inf,'DelayTime',0.5);               %Inf 无限循环& Q* c2 C% S0 J- ?  W
    else2 t: A5 l  b4 A) ~
        imwrite(A,map,'new.gif','WriteMode','append','DelayTime',0.8);
. ^) k; C4 G$ |1 V    end2 [, B: c$ o8 o3 X* v# R
end8 I0 g7 O- @4 ], _& o
( s& r( v+ I* I  q$ _! V- m4 a

- X' X2 y7 s) _: k% P  e3 @. C6 \关于代码有遇到别的问题,或者有改进意见,欢迎评论。
, P4 y. Q; d" Z# C, Q4 [
# i* q$ g2 T$ Z% m7 \! r6 T在实现过程中我也遇到了很多问题,有些注释在代码中,有些遗漏了,希望可以在讨论中得到补充。
" c& W8 S6 O" T9 b+ s8 h
) G7 |" x: D- \# C3 @" I/ f% }+ Q$ g; w3 e3 J
$ O8 O. D6 O5 S2 S* X
" \; d8 G2 Z" k) S' H1 n& T

3 k  p: B8 C# ]2 ?, g
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-6-16 18:32 | 只看该作者
    用matlab制作GIF动画
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 17:32 , Processed in 0.218750 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表