prefacio
Debido al módulo de segmentación de mediapipe, es posible lograr la segmentación de personajes y recortar imágenes del cuerpo humano
Código
importar biblioteca
import cv2
import mediapipe as mp
from tqdm import tqdm
import time
import matplotlib.pyplot as plt
%matplotlib inline
Definir la función de vista de imagen
def look_img(img):
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_RGB)
plt.show()
leer imagen
img=cv2.imread('C:\\Users\\123\\Desktop\\2022-6-28.jpg')
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#BGR转RGB
importar módulo dividido
seg = mp.solutions.selfie_segmentation.SelfieSegmentation(model_selection=0)
results = seg.process(img_RGB)#输入模型,获取预测结果
mask = results.segmentation_mask
plt.imshow(mask)
plt.show()
Después de la división inicial, como se muestra a continuación
Filtrar píxeles con un umbral de 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)
Ver primer plano humano
look_img(FG_img)
Como se muestra abajo
Ver fondo del cuerpo humano
look_img(BG_img)
Como se muestra abajo