http://sweetclipart.com/multisite/sweetclipart/files/sunglasses_black.png
我使用[X,map,alpha]=imread('...','png')
在MATLAB中读取了png图像。
现在我想把这个png图像放在另一个图像上。但是我希望不显示读取png的背景颜色。在链接中,我希望单独使用太阳镜而不使用白色'背景(背景是另一个图像)。
答案 0 :(得分:1)
Alpha通道是不透明的,与透明度相反。
MATLAB数据通过AlphaData
属性支持alpha混合:
background = uint8(255*rand(size(alpha)));
imshow(background)
hold on
h = imshow(X);
set(h, 'AlphaData', alpha)
结果:
鉴于另一张图片Y
和您的图片X
及其alpha数据,您可以使用alpha生成混合图片。在您的情况下,alpha
只有值0和255,但通常可以有不透明度级别。在这个简单的情况下,再次使用噪声背景,但颜色:
out = uint8(255*rand(size(X))); % Y
hardMask = repmat(alpha==255,1,1,3);
out(hardMask) = X(hardMask);
imwrite(out,'sunglass_alphaC.png')
这是一个很大的图像,所以我在这里调整了输出的大小:
如果您的Alpha通道实际上有两个以上的透明度级别,您可以与背景混合:
s = double(alpha)/255;
Yout = uint8((bsxfun(@times,1-s,double(Y)) + bsxfun(@times,s,double(X))));
对于灰度,bsxfun
只能替换为.-
(例如s.*double(X)
)。
答案 1 :(得分:0)
我不太了解Matlab,但似乎是[X,map,alpha]使用" alpha"作为alpha通道; alpha通道意味着透明度。 (可能你已经知道了)。同时检查图像本身是否设置了alpha通道。 PNG不承认" white"默认为alpha通道。在这种情况下,去你最喜欢的" *商店"用于编辑照片的软件(可能选择使用魔术工具作为背景,选择反转,复制粘贴到之前指定背景图像为透明的新图像)。
答案 2 :(得分:0)
你可以这样做:
% Image with alpha channel
[glasses, ~, alpha] = imread('http://sweetclipart.com/multisite/sweetclipart/files/sunglasses_black.png');
% OPTIONAL: Let's rescale it (it's very big!)
glasses = imresize(glasses, 0.1);
alpha = imresize(alpha, 0.1);
% An image of a person (let's put the glasses on the person).
person = imread('http://cinemacao.com/wp-content/uploads/2013/12/Scarlett-CAPA-2.jpg');
% Lets make the alpha MxNx3 (so we can combine it with the RGB channels).
alpha = repmat(alpha, [1 1 3]);
% And convert everything from uint8 to double (to avoid precision issues).
glasses = im2double(glasses);
alpha = im2double(alpha);
person = im2double(person);
% Final image
% Let x,y be the top-left coordinates where we'll put the glasses.
x = 440;
y = 450;
% Let's combine the images.
img3 = person;
img3(y:y+size(glasses,1)-1, x:x+size(glasses,2)-1, :) = ...
glasses .* alpha + ...
person(y:y+size(glasses,1)-1, x:x+size(glasses,2)-1, :) .* (1 - alpha);
% An display the result.
imshow(img3);
结果: