我正在尝试使用Mask RCNN ( https://github.com/matterport/Mask_RCNN )分割程序,该程序经过COCO数据集的训练。它可以检测图像中的人物(以及我进一步忽略的许多其他对象),并返回一个或多个人体掩膜,即布尔Numpy数组。所有被分类为“人类”的像素都包含True值,而其他像素则包含False值:
因此,输入的图像(uint8,形状为(3900,2922,3)的数组)变成了一个掩膜(形状为(3900,2922)的布尔数组),或者在图像中检测到多个人体时变成多个掩膜。
现在我可以使用这个掩膜通过简单的Numpy数组索引将人物从图像中剪切出来:
mask3d = np.dstack([mask]*3)
cut_out_mask = np.invert(mask3d)
res = np.where(cut_out_mask, 0, image)
这将返回以下图像:
![Cut_out Image](https://istack.dev59.com/Wk24l.webp)
![manual](https://istack.dev59.com/rUujB.webp)
np.where
),并在掩码周围添加15像素的边距?
cv2.dilate
函数。其思路是先对掩模进行膨胀操作,然后与原始输入图像进行按位与运算。 - nathancy