如何用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动画。如图所选区域就是两个小孩即将拥抱的镜头所在区域。鼠标选中之后,双击。
如何用MATLAB来制作GIF动画_第1张图片

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

效果图如下:

扫描下方二维码关注我的微信公众号:阿不小奇谈
想要获取本视频素材以及源码,在公众号后台发送:GIF
如何用MATLAB来制作GIF动画_第2张图片
或者直接加我的个人微信:Abox_0226
如何用MATLAB来制作GIF动画_第3张图片

你可能感兴趣的:(MATLAB学习笔记)