【mediapipe】人体分割抠图

前言

由于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)#BGRRGB

导入分割模块

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)

如下图所示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_64605223/article/details/125607203