||
首发:qixinbo.info
有时候需要将图片的背底变成透明,从而适应各种不同背景(尤其不是白色背景),使得图片能更融入到背景中去。专业中也遇到这样一个问题,需要将两个枝晶轮廓在一起比对看是否重合。将背底变为透明色,通常可以使用PowerPoint的”设置透明色”这一功能,但对于对比很明显的图片效果较好,对比不明显的图片则偏差很大,且不能人为操纵。这里采用Mathematica,仅用几行代码即可实现。
对于黑白图片,或可以将图片转为黑白的情形:
Mathematica源码为:
1 2 3 | img1 = Binarize[img]; img2 = ColorConvert[img1, "Grayscale"]; img3 = ImageApply[{#, Boole[# < .1]} &, img2] |
程序思路:
先将导入的img图片通过Binarize函数二值化成为img1,再将img1的颜色空间转化为Grayscale灰度,这一步很重要,否则下一步无法进行。最后使用ImageApply函数对img2的每个像素添加一个alpha通道,具体为判断像素是否为黑色,若是则alpha通道为1;若否则alpha通道为0。
对于彩色图片,想要将某一颜色设为透明:
Mathematica源码为:
1 2 3 | imgB1 = SetAlphaChannel[imgB, 1]; imgB2 = ImageApply[ If[(#[[1]] + #[[2]] + #[[3]])/3 < 0.9, #, {#[[1]], #[[2]], #[[3]],0}] &, imgB1] |
程序思路:
首先应用SetAlphaChannel对导入的图片增加alpha通道,然后应用ImageApply对每个像素进行判断,这里的判断条件需要针对要研究的对象进行调节,如果不满足设为透明的条件,则保留原像素值;若满足,则保留像素的RGB值,但修改其alpha通道为0。
注意:输出图片的格式需要选择支持alpha通道的格式,如png,而不能选择jpg。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 13:57
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社