hello,之前发过一篇使用u2net来实现人像抠图换背景的文章,对于一些简单的图片(单人,场景简单)有很好的效果,但是由于官方提供的预训练模型是基于一个多分类无标签数据集训练出来的,因此除了人还会分割出一些一些其他的东西,今天再来介绍一种方法,是有商汤最新提出的matting算法。
代码链接(我只是算法的搬运工)
下载好代码和预训练模型以后,在inference.py文件中修改相关配置参数(输入、输出、权重文件地址)运行即可。
下面给大家看一下效果图:
是不是效果很棒!头发丝都能分割出来,然后基于原图和alpha图片,我们将人从背景中分割出来:
import os
import cv2
import numpy as np
#im1 原图 im2 alpha图
im1_path = 'MODNet/demo/image_matting/images'
im2_path = 'MODNet/demo/image_matting/alpha'
num = len(os.listdir(im1_path))
for i in range(num):
img1 = cv2.imread(os.path.join(im1_path, os.listdir(im1_path)[i]))
img2 = cv2.imread(os.path.join(im2_path,os.listdir(im2_path)[i]), cv2.IMREAD_GRAYSCALE)
h,w,c = img1.shape
img3 = np.zeros((h,w,4))
img3[:,:,0:3] = img1
img3[:,:,3] = img2
#这里命名随意,但是要注意使用png格式
cv2.imwrite('MODNet/demo/image_matting/fenge/' + '%s.png' % os.listdir(im1_path)[i], img3)
怎么样 是不是很完美!为美丽的沁沁点个赞吧!