问题:使用冲浪图时,图像会失去透明度
我已经想出如何创建一个透明背景的png文件,如许多其他线程所述。here
但是,使用surf.m绘图时,图像不透明
这是我到目前为止的代码:
img = imread('image.png');
A1 = ones(size(img));A2 = ones(size(img));A3 = ones(size(img));
A1(img(:,:,1)==0)=0;A2(img(:,:,2)==0)=0;A3(img(:,:,3)==0)=0;
A = A1+A2+A3;
A= A(:,:,1);
imwrite(img,'test.png','alpha',A);
[img,map,alpha] = imread('test.png');
ximage = [-.5,.5;-.5,.5];
yimage = [0,0;0,0];
zimage = [.5,.5;-.5,-.5];
surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor','none','alphadata',alpha);
axis vis3d
代码将image.png(蓝色方块)转换为具有透明背景的test.png(摆脱黑色背景)。然后使用test.png生成一个冲浪图,结果证明不是透明的。知道我做错了吗?
答案 0 :(得分:3)
MATLAB中有一个名为alpha
的函数,用于设置当前轴中对象的透明度。我建议通过替换以下行来将名为alpha
的变量更改为其他名称
[img,map,alpha] = imread('test.png');
到
[img,map,alphaChannel] = imread('test.png');
现在,在运行surf
之后,您可以通过alpha
功能设置绘图的透明度。
使用alpha
功能
surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor', ...
'none','alphadata',alpha);
alpha(0.5); %# line added
axis vis3d
使用surf
功能
如果您想通过surf
功能设置透明度,则需要添加'FaceAlpha'
参数:
surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor', ...
'none','AlphaData',alphaChannel,'FaceAlpha',0.5);
<强>结果强>
但是上面的那些功能设定了整个情节的透明度。如果您要设置原始透明度矩阵,则需要将'FaceAlpha','texture'
参数传递给surf
:
handler = surf( ximage , yimage , zimage , 'Cdata', img , ...
'FaceColor','texturemap', ...
'EdgeColor','none', ...
'FaceAlpha','texture', ...
'AlphaData', alphaChannel);
axis vis3d
<强>结果强>
More details。希望它有所帮助!