前言
由于mediapipe的分割模块,可以实现人物分割,对人体图片进行抠图
代码实现
导入库
import cv2
import mediapipe as mp
from tqdm import tqdm
import time
import matplotlib.pyplot as plt
%matplotlib inline
定义查看图片函数
def look_img(img):
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_RGB)
plt.show()
读入图像
img=cv2.imread('C:\\Users\\123\\Desktop\\2022-6-28.jpg')
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#BGR转RGB
导入分割模块
seg = mp.solutions.selfie_segmentation.SelfieSegmentation(model_selection=0)
results = seg.process(img_RGB)#输入模型,获取预测结果
mask = results.segmentation_mask
plt.imshow(mask)
plt.show()
初次分割后如下图
以0.5为阈值过滤像素
mask = mask > 0.5
plt.imshow(mask)
plt.show()
import numpy as np
mask_3=np.stack((mask,mask,mask),axis=-1)#单通道转三通道
MASK_COLOR=[0,200,0]
fg_image=np.zeros(img.shape,dtype=np.uint8)
fg_image[:]=MASK_COLOR
FG_img=np.where(mask_3,img,fg_image)
BG_img=np.where(~mask_3,img,fg_image)
查看人体前景
look_img(FG_img)
如下图所示
查看人体背景
look_img(BG_img)
如下图所示