img下面的png图片 vs 读不出来_Matlab ---- 有透明度的png图像的显示与图层叠加方法...

本文探讨了在Matlab中处理带透明度的PNG图像的需求,包括如何显示透明度、设置单个像素的透明度以及如何将带有透明度的图像叠加在原始图像上。通过使用alpha通道和alpha blending技术,实现图像的透明效果和图层叠加。
摘要由CSDN通过智能技术生成

77ecfd7e5316e9c7322c4c6bc4b8cff4.png

需求和问题来源

由于图形图像的语义分割工作中,需要对不同类型的区域,进行标示,但又不能完全覆盖背景图像。这产生了一个新的需求:

  • 产生一个带有透明度的图像;
  • 将带有透明度的图像,叠加在原始图像上。

Matlab中的透明度图像

带透明背景的图像,用普通图像软件打开时,比如window自带的照片查看器,会得到一个黑色背景。 我把它叠加在背景图像上我怎样才能把这个展示出来我试过使用alpha函数alpha(image,0),但它将我的整个图像设置为0是否可以将单个像素的alpha设置为0这样我就可以在一个循环中运行每个像素。
我不确定这是否有用,但是当我运行imfinfo('full-active.png')时,我得到:

...
Transparency = 'alpha' 
SimpleTransparencyData = []
...

显示带透明度的PNG图像

您可以使用imread读入图像。但是,如果要获取alpha通道,则需要指定其他输出参数你需要这样调用它:

[im, map, alpha] = imread('full-active.png');

im是图像本身,map是将忽略的颜色的映射,但alpha是图像的透明度信息,其维度与图像一致。

首先调用imshow并记录图像的句柄,然后使用alpha命令使用set通道设置透明度换句话说:

[im, map, alpha] = imread('full-active.png');
f = imshow(im);
set(f, 'AlphaData', alpha);

这将使透明的图形保持完整。

bc5925a85cd375d777b88ce599536e79.png

叠加带透明度的PNG图像

946ec58e36cfe80a675571e682004197.png

假设你已经有一个背景图像加载到MATLAB中。

如果你想把这两者混合在一起,你需要做一些alpha消光。你用alpha通道把两者混合在一起。换言之,假设背景图像存储在img_background中,并且img_overlay是叠放在背景图片之上的图像,请执行以下操作:

alphaMask = im2double(alpha); %// To make between 0 and 1
img_composite = im2uint8(double(img_background).*(1-alphaMask) + double(img_overlay).*alphaMask);

第一步是必要的,因为加载的alpha映射与输入图像的类型相同,通常uint8我们需要将其转换为double图像,使其介于0和1之间,并且im2double非常适合这样做第二行将每个图像转换为双精度,这样我们就可以计算这个和,并使alpha掩码和两个图像之间的数据类型兼容然后我们转换回uint8然后,可以使用imshow显示最终图像。

代码案例:

% PNG透明度
imfinfo('full-active.png')
figure
imshow('full-active.png');
[png_figure, map, alpha] = imread ("full-active.png");
figure;
png_figure_handle = imshow(png_figure );
title("png figure");
size(png_figure)
set(png_figure_handle, 'AlphaData', alpha)

img_background = img_background_original(101:400, 1:300,:);
figure;
imshow(img_background )
title("background figure");

alphaMask = im2double(alpha); %// To make between 0 and 1   im2double
img_composite = im2uint8(double(img_background).*(1-alphaMask) + double(png_figure).*alphaMask);
figure;
imshow(img_composite )
title("Fusion figure");
% 基于pixelmarked图像,转变成有透明度的PNG图像

图示效果

e1a1355d101d63bef4dba325175d058d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值