猛跑小猪
加载库并读取图像from __future__ import divisionimport cv2import numpy as npguy_img = cv2.imread('path')target_img = cv2.imread('path')获取男人(每个非零像素)和目标蒙版(粉红色区域)的边界框。a = np.where(guy_img > 0)b = np.where(target_img == 129) # picked one of the channels in your imagebbox_guy = np.min(a[0]), np.max(a[0]), np.min(a[1]), np.max(a[1])bbox_mask = np.min(b[0]), np.max(b[0]), np.min(b[1]), np.max(b[1])请注意,当我加载目标图像时,值与您提供的值不同。图像边缘也有一些白色像素。这可能只是因为图像被上传到 imgur 并被下载。如果您的值是正确的,并且除了粉红色区域之外,您的图像的其余部分都是完全黑色的,您可以像使用np.where(target_img > 0).现在只获取 Guy 和 mask 区域的值guy = guy_img[bbox_guy[0]:bbox_guy[1], bbox_guy[2]:bbox_guy[3],:]target = target_img[bbox_mask[0]:bbox_mask[1], bbox_mask[2]:bbox_mask[3],:]将人调整为与面具相同的比例/形状guy_h, guy_w, _ = guy.shapemask_h, mask_w, _ = target.shapefy = mask_h / guy_hfx = mask_w / guy_wscaled_guy = cv2.resize(guy, (0,0), fx=fx,fy=fy)使用男人图像值重新分配目标图像的遮罩区域for i, row in enumerate(range(bbox_mask[0], bbox_mask[1])): for j, col in enumerate(range(bbox_mask[2], bbox_mask[3])): target_img[row,col,:] = scaled_guy[i,j,:]cv2.imshow('', target_img)cv2.waitKey(0)