我有一个透明背景的图像,但是当我在MATLAB中打开它时,我得到一个黑色背景。我将它叠加在背景图像上。我怎样才能显示它?我尝试使用alpha函数alpha(image,0)
,但它将我的整个图像设置为0.我可以将单个像素的alpha设置为等于0吗?这样我可以通过循环运行每个像素。
我不确定这是否有帮助,但当我运行imfinfo('ryu1.png')
时,我得到:
...
Transparency = 'alpha'
SimpleTransparencyData = []
...
答案 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);
这应该使透明度完好无损。
假设您已将背景图像加载到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
显示此最终图像。