如何使透明度的png在MatLab中显示为透明?

use*_*886 3 matlab png alpha image transparent

我有一个透明背景的图像,但是当我在MATLAB中打开它时,我得到一个黑色背景.我将它叠加在背景图像上.我怎样才能显示它?我尝试过使用alpha函数,alpha(image,0)但它将我的整个图像设置为0.我可以将各个像素的alpha设置为等于0吗?这样我就可以通过循环运行每个像素.

我不确定这是否有帮助,但是当我跑步时imfinfo('ryu1.png'),我得到:

...
Transparency = 'alpha' 
SimpleTransparencyData = []
...
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 9

您可以使用以下方式阅读图像imread.但是,如果要获取Alpha通道,则需要指定其他输出参数.你需要像这样调用它:

[im, map, alpha] = imread('ryu1.png');
Run Code Online (Sandbox Code Playgroud)

im是您的图像读入,map是我们将忽略的颜色映射,但alpha包含您想要的透明度信息.首先调用imshow并记录图像的句柄,然后alpha使用该set命令设置透明度.换一种说法:

[im, map, alpha] = imread('ryu1.png');
f = imshow(im);
set(f, 'AlphaData', alpha);
Run Code Online (Sandbox Code Playgroud)

这应该使透明完整的图形.


加法(感谢Yvon)

假设您已经将背景图像加载到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);
Run Code Online (Sandbox Code Playgroud)

第一步是必要的,因为加载的alpha映射将与输入图像的类型相同,这通常是uint8.我们需要将其转换为double图像,使得它与云中01,和im2double是完美的做到这一点.第二行将每个图像转换为双精度,以便我们可以计算此总和,以便使alpha蒙版和两个图像之间的数据类型兼容.然后我们转换回来uint8.然后,您可以使用显示最终图像imshow.

  • OP可能希望将此图像叠加到另一幅图像上-'img_composite = img_background。*(1-alpha)+ img_overlay。* alpha' (2认同)