Advertisement

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

阅读量:

实验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);

全部评论 (0)

还没有任何评论哟~