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

时间:2014-08-07 00:23:56

标签: image matlab png transparent alpha

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

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

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

1 个答案:

答案 0 :(得分:8)

您可以使用imread阅读图片。但是,如果要获取Alpha通道,则需要指定其他输出参数。你需要这样称呼它:

[im, map, alpha] = imread('ryu1.png');

im是您的图片读入,map是我们将忽略的颜色地图,但alpha包含您想要的透明度信息。首先调用imshow并记录图像的句柄,然后使用alpha命令使用set频道设置透明度。换句话说:

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

这应该使透明度完好无损。


加法(感谢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);

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