如何用MATLAB来制作GIF动画

相信大家平时制作PPT时,通常会需要一些GIF加以修饰或者辅助说明。但是又苦于不会用视频剪辑软件或者制作的质量不够完美。今天,给大家分享一个如何用MATLAB来制作GIF动画,不仅简单实用体积小,GIF动画的效果还很精致。其中涉及到了很多MATLAB编程的一些基础知识,比如for语句、while循环以及涉及到图像处理的函数语法,我都作了详细的注释。相信在给大家带来干货分享的同时,也会加深大家对编程基础知识的理解和对编程的认识。

1.分解视频所有帧

这步操作,主要是将视频所有帧的图像读取出来,并且按照序号进行保存
(如果视频比较大的话,大家可以根据实际情况,对for循环进行修改读取和保存相应的部分),方便大家根据图片的序号查找视频中想要节选的片段。

// An highlighted block
video = VideoReader('video_eg.mp4'); %读取视频
nFrames = video.NumberOfFrames; %获取视频帧数
% H = video.Height;     %得到高度
% W = video.Width;      %得到宽度

%read one frame every time
for i = 1:nFrames
  mov = read(video,i);  %读取视频的每一帧
  name = strcat('mov_',int2str(i),'.jpg'); %给每一帧命名
  imwrite(mov,name);  %保存每一帧图像
  pause(0.0001) %暂停
end
2.鼠标手动裁剪

为了更精准地满足对GIF制作的需求,视频的整个界面中有可能有很多多余的部分,这是我们需要对视频屏幕区进行选取,用鼠标画出矩阵区域裁剪我们想要的部分。

%% ==== 选取鼠标手动裁剪选定的gif区域
start  = 130; %设置初始帧
stepall = 203; %设置终止帧
step1 = 1; %GIF动画帧间隔
name = strcat('mov_',int2str(start),'.jpg'); %帧名
gif_img = imread(name);  
[b,r] = imcrop(gif_img); %裁剪函数裁剪图像

这是我从抖音上随便下载了一个小视频作为素材,想要将两个小孩子拥抱的镜头加个特写制作出一个GIF动画。如图所选区域就是两个小孩即将拥抱的镜头所在区域。鼠标选中之后,双击。
在这里插入图片描述

3.制作GIF动画

接下来便对上一步中,所选择的帧图像序号,进行合成制作GIF动画了。这里我选择的起始和终止序号分别是130,203,大家根据自己实际情况做修改即可。

//
i = start;
while(i <= stepall)
      
 name = strcat('mov_',int2str(i),'.jpg');

    b = imread(name);
    gif_img = imresize(b,1); %把图像放大*倍
    gif_img=imcrop(gif_img,r);%交互式裁剪
    
    [I,map] = rgb2ind(gif_img,128);  %索引图像        
    if i == start
        imwrite(I,map,'New.gif','gif', 'Loopcount',inf,'DelayTime',0.000001); 
    elseif i == stepall
        imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001);
    else
        imwrite(I,map,'New.gif','gif','WriteMode','append','DelayTime',0.000001);
    end
  i= i+step1;
end

效果图如下:在这里插入图片描述


有问题和需要源码的小伙伴们可以直接扫码,点击下方文章链接
手把手教你用MATLAB制作gif动画,从此PPT汇报不再为素材犯愁了
在这里插入图片描述
回复:MATLAB,获得更多MATLAB的学习资料。

  • 12
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值