frame包含RGB图像信息和颜色映射表
image只是RGB图像
indexed image:
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值直接映射为调色板数值。
调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。
索引模式和灰度模式比较类似,它的每个象素点也可以有256种颜色容量,但它可以负载彩色。索引模式的图像最多只能有256种颜色。当图像转换成索引模式时,系统会自动根据图像上的颜色归纳出能代表大多数的256种颜色,就象一张颜色表,然后用这256种来代替整个图像上所有的颜色信息。
Gif文件可能只能显示索引图像。
生成方法1:
frame = getframe(1);
end
生成方法2:
X(m,n,1,k)=floor(a*X1(m,n)+b*X2(m,n));
imwrite(X,map,'225','gif')
读取方法:
[Ii, map] = imread('pig.gif', 'frames', i);
F(:, i) = im2frame(flipud(Ii), map);
有趣代码:
H={'*.bmp';'*.jpg';'*.gif';'*.tif';'*.tga'};
[filename,pathname]=uigetfile(H,'请选择需要打开的图像');
file=strcat(pathname,filename);
I=imread(file);
figure('NumberTitle', 'off', 'ToolBar', 'none', 'Menu', 'none');
pos = get(gcf, 'position');
set(gcf, 'position', [pos(1) pos(2) W H]);
set(gca, 'position', [0 0 1 1]);
一个gif的例子:讲avi文件转换为gif文件
代码如下
%%
function main
clc
clear all
close all
%%
fileavi = 'Tunning_Fork10.avi';
[pathstr, name] = fileparts(fileavi);
filegif = fullfile(pathstr,[name '.gif']);
%%
xyloObj = mmreader(fileavi); % mmreader很好用
nFrames = xyloObj.NumberOfFrames;
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
%% Preallocate movie structure.
mov(1:nFrames) = struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'), 'colormap', []);
for k = 1 : nFrames
end
% Size a figure based on the video's width and height.
hf = figure;
set(hf, 'position', [150 150 vidWidth vidHeight])
% Play back the movie once at the video's frame rate.
movie(hf, mov, 1, xyloObj.FrameRate);
end
%% 向gif文件写图片
function writetogif(frame,file,k,loopcount,delaytime)
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if k == 1;
else
end
end
从上面也可以看到,从avi读取的每一幅图像都是一个数据结构,包含cdata和colormap两个域,即
struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),...
getframe函数也是得到相同的数据结构,frame2im函数将此数据结构转换为一个数组,相当于提取cdata数据,里面存储的是R、G、B的数据,rgb2ind函数相当于将RGB图像转换为索引图像,imind为索引值,cm为索引矩阵。