需求和问题来源
由于图形图像的语义分割工作中,需要对不同类型的区域,进行标示,但又不能完全覆盖背景图像。这产生了一个新的需求:产生一个带有透明度的图像;
将带有透明度的图像,叠加在原始图像上。
Matlab中的透明度图像
带透明背景的图像,用普通图像软件打开时,比如window自带的照片查看器,会得到一个黑色背景。 我把它叠加在背景图像上我怎样才能把这个展示出来我试过使用alpha函数alpha(image,0),但它将我的整个图像设置为0是否可以将单个像素的alpha设置为0这样我就可以在一个循环中运行每个像素。
我不确定这是否有用,但是当我运行imfinfo('full-active.png')时,我得到:
...
Transparency = 'alpha'
SimpleTransparencyData = []
...
显示带透明度的PNG图像
您可以使用
[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);
这将使透明的图形保持完整。
叠加带透明度的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图像
图示效果
如果觉得《matlab设置图片背景透明_Matlab ---- 有透明度的png图像的显示与图层叠加方法》对你有帮助,请点赞、收藏,并留下你的观点哦!