前言
调研了好几天,网上大多数是需要收费的API接口,在准备付费购买接口的时候,一篇文章给我带来了希望 Android ------ 开源的Modnet算法实现抠图和更换背景 再次感谢作者的分享
效果图
原作者的代码是无法切出透明背景的,我的项目需求是上传图片识别人像,更换背景变成景点,纯色的背景肯定是不行的,在此基础上进行背景消除
透明背景的原理是使用 setPixel 将对应bitmap 像素点设置成透明的
怎么知道要将哪些像素点设置成透明呢? 我这里使用了骚操作,如果想要透明背景,默认给图片设置一个比较偏僻的颜色,获取原图中的像素点如果等于偏僻颜色,则将该像素点设置成透明的。。。秀不秀
会有如果恰好你的图片像素点和偏僻像素点一样也会搞成透明的,一般颜色千奇百怪,能对应上的点也很少,无伤大雅
以上就是与原作者不一样的地方,具体原理分析建议去阅读原作者,致敬!
本文的使用方法如下
第一步导入依赖
maven { url 'https://jitpack.io' }
dependencies {
implementation 'com.github.zch-live:cut_image:1.0.4'
}
第二步传入要分割的bitmap
//image - 要分割的bitmap
CutImageUtils.onImageChanged(image, this, new CutImageUtils.CutImageInterface() {
@Override
public void back(Bitmap outputImage, Bitmap inputImage, String time) {
//outputImage 分割后的图片
//inputImage //原图
//time //消耗时间
}
});
这样即可得到分割后的图片
更换纯色背景 要在 onImageChanged 前调用
CutImageUtils.setBgColor("#00FFFF");
使用透明背景 要在 onImageChanged 前调用
CutImageUtils.setTransparent();