Android原生方法几行代码实现对人像进行切割,Android图片人像分离,可更换背景或者透明背景

前言

调研了好几天,网上大多数是需要收费的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();

注意 !!!!

这里分割过程中需要注意下,可能在识别过程中图片会跳成以下这个

在这里插入图片描述

不要惊慌,不要差异,我的理解是分割需要用到模型,这个图片是在模型中识别学习用的,最终的图片还是我们上传的图片,只是在过程中会跳一下成这个
如何解决呢? 本来分割就是耗时操作,我的建议就是在 back 回调后,拿到图片再加一个 几秒延迟,再将要显示分割后的图片在显示出来,一开始默认让他隐藏掉,问题完美解决~

结尾

相对于网上付费的API接口来说,这个原生的方法更快,成本更低,分离效果基本可以以假乱真!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值