实验1.1:图像加载、显示
利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试;
Code
%读取一般的图片用imread即可,动态图用后半部分代码实现,原理的逐帧读取,逐帧显示
I=imread('cc.png');
figure;imshow(I)
info = imfinfo('t3.gif');
len = length(info);
for i = 1 : len
[Ii, map] = imread('t3.gif', 'frames', i);
F(:, i) = im2frame(Ii, map);
end
implay(F);
实验1.2:图像合成
现有一张4通道透明图像a.png:
从其中提取出alpha通道并显示;
用alpha混合,为a.png替换一张新的背景(背景图自选);
[I,map,alpha]=imread(filename)即可取得图像的alpha通道,然后imshow(alpha)显示即可。在替换图片背景时,先分别获取原图以及背景图的RGB三通道的值,对alpha进行/255处理,因为获取到的alpha是uint8类型的数据,所以透明部分的值变为了0,不透明以及半透明的变为了1,然后利用这个值对RGB三通道进行混合,既R.*a+(1-a).*back(:,:,1);(其中a为alpha变换后的值,back为背景图的RGB值,这里需要注意的是截取背景图的大小,矩阵乘法需保证维度相同)(前为alpha通道显示,后图为背景混合后的图像)
Code
I=imread('a2.png');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
[I2,map,alpha]=imread('a2.png');
figure;imshow(alpha)
back=imread('cc.png');
a=alpha/255;
%615与924是为了适配图片大小,因为代码是很久以前写的了,不太规范,但也只是给后来人提供一个样例而已
img(:,:,1)=R.*a+(1-a).*back(1:615,1:924,1);
img(:,:,2)=G.*a+(1-a).*back(1:615,1:924,2);
img(:,:,3)=B.*a+(1-a).*back(1:615,1:924,3);
figure;imshow(img);
figure;imshow(I);