山东大学 数字图像处理 实验一

实验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;
%615924是为了适配图片大小,因为代码是很久以前写的了,不太规范,但也只是给后来人提供一个样例而已
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);
发布了31 篇原创文章 · 获赞 0 · 访问量 327

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/104208484