GIF动态图制作制作
/**使用这个程序只需将循环中的i=3374:3379改成自己的图像的编号即可,还有str=sprintf()中的图片的类型也要修改**/
clc
clear
close all
filename='D:\\matlab_program\\Mycode\\fish1.gif'; %输出路径+保存的文件名.gif
for i=3374:3379
str = sprintf('D:\\matlab_program\\Mycode\\%d.png',i); %图片绝对位置和类型,注意这里的图片类型不能是bmp格式
img = imread(str); %读取图像
figure(i)
imshow(img)
set(gcf,'color','w'); %设置背景为白色
set(gca,'units','pixels','Visible','off');
frame = getframe(gcf);
im = frame2im(frame); %将影片动画转换为编址图像,因为图像必须是index索引图像
imshow(im);
[I,map] = rgb2ind(im,20); %将真彩色图像转化为索引图像
if i==3374;
imwrite(I,map,filename,'gif','Loopcount',inf,'DelayTime',0.3); %Loopcount只是在i==1的时候才有用
else
imwrite(I,map,filename,'gif','WriteMode','append','DelayTime',0.3);%DelayTime:帧与帧之间的时间间隔
end
end
close all
====一条快乐的分割线====
代码帮助
set(gca,'units','pixels','Visible','off'); /** Units:有效值为pixels/normalized/inches /centimeters/points/characters 决定各种位置属性的度量单位,相对于窗口左下角为基准。当设置为Pixels时,以像素为单位; 当设置为normalized时,以坐标为单位,屏幕的左下角为[0,0],右上角为[1.0,1.0]。 Visible:决定坐标轴是否可见 **/
[X,map] = rgb2ind(RGB,n) /** 使用最小方差量化和抖动将RGB图像转换为索引图像X。map最多包含n个颜色。 **/
- MATLAB getframe用法
F = getframe(H,Rect)
- H:图像句柄
- Rect:一个四元素向量,Rect=[a b c d],其中a表示截取区域到图像左端的像素数,b表示截取区域到图像底端的像素数,c表示截取区域水平像素数,d表示截取区域垂直向像素数。
- F:是一个结构体,包含两个元素:cdata和colormap
- cdata:Rect中参数选择的区域的数据,一个三维数组,其中第三维的长度是3,即截取到的是区域中RGB的值。
- colormap:调色板数据
效果图对比
- 当
[X,map] = rgb2ind(RGB,n) %n=256时
由于图像是以16位存储的,n最大等于65536。
- 当
[X,map] = rgb2ind(RGB,n) %n=20时
,可以看到n=20时,图片明显的模糊了很多
- 当
[X,map] = rgb2ind(RGB,n) %n=0时
,可以看到n=0时,图片丢失了更多的信息