matlab 制作gif动画

zyazky 2020-04-25

使用matlab制作一个n帧的gif动画 示意程序

for i = 1:nFrames
 
    % draw stuff
 
    frame = getframe(gcf);
    img =  frame2im(frame);
    [img,cmap] = rgb2ind(img,256);
    if i == 1
        imwrite(img,cmap,‘animation.gif‘,‘gif‘,‘LoopCount‘,Inf,‘DelayTime‘,1);
    else
        imwrite(img,cmap,‘animation.gif‘,‘gif‘,‘WriteMode‘,‘append‘,‘DelayTime‘,1);
    end
end

Step1:捕获当前图窗并生成索引图像

frame=getframe(gcf)是捕获当前图窗作为影片帧,frame是一个结构体,包含cdata和colormap

cdata是一个存放真彩色图像数据的矩阵,大小为M*N*3

当cdata存放真彩色图像时,colormap=[]

img=frame2im(frame)是将捕获的影片帧转换为图像数据,img为真彩色图像,即从结构体frame中提取出的cdata

因为 不支持将真彩图像写入GIF文件,所以应调用 rgb2ind, 将图像中的 RGB 真彩图像数据转换为索引图像

[X,cmap] = rgb2ind(RGB,Q) 使用具有 Q 种量化颜色的最小方差量化法并加入抖动,将 RGB 图像转换为索引图像 X,关联颜色图为 cmap。

索引图象X矩阵大小为M*N

Step2:调用imwrite函数将索引图像写入gif文件中

语法:imwrite(索引图象,索引图象颜色图,‘gif文件名‘,‘gif‘,名称-值对组参数)

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数

以下是本程序使用到的名称-值对组参数

‘DelayTime‘ - 显示下一个图像之前的时滞

显示下一个图像之前的时滞(秒),指定为逗号分隔的对组,包含 ‘DelayTime‘ 和范围 [0,655] 内的标量值。0 的值以硬件允许的最快速度显示图像

‘LoopCount‘ - 重复动画的次数

重复动画的次数,指定为以逗号分隔的对组,包含 ‘LoopCount‘ 和 [0,65535] 范围内的整数或 Inf 值。如果指定 0,动画将播放一次。如果指定值 1,动画将播放两次,以此类推。Inf 的 LoopCount 值可使动画连续循环

‘WriteMode‘ - 写入模式

写入模式,指定为逗号分隔的对组,包含 ‘WriteMode‘ 和 ‘overwrite‘ 或 ‘append‘。在 overwrite 模式下,imwrite 覆盖现有文件 filename。在 append 模式下,imwrite 会向现有文件添加单个帧。

相关知识:

MATLAB有三种基本的图像类型:
Truecolor(真彩色图像)——数码相机的格式,广泛用于计算机图形。
Indexed (索引图象)和 scaled indexed (比例索引图象)——经常用来显示科学或者工程数据

真彩色图像

在这种格式的图里,每一个像素由三个数字表示:红,绿,蓝,整个图形由一个M-N-3的三维矩阵表达。图形显示函数和图形处理工具箱将这种矩阵视为一个truecolor图形

矩阵值直接指定了每一个像素的颜色。通过这种表达方式你可以很大程度上控制颜色显示,但是对于工程应用来说它并不是最适合的一种图形格式。

索引图像

为了解决彩色图像消耗空间大的问题,一般应用于色彩构成比较简单的场景,索引图像包括一个数据矩阵X,一个颜色映像矩阵Map。像素颜色由数据矩阵X作为索引指向矩阵Map进行索引。

相关推荐