【发布时间】:2020-06-14 20:51:46
【问题描述】:
我正在玩在 COCO 数据集上训练的 Mask RCNN (https://github.com/matterport/Mask_RCNN) 分割程序。它检测图像中的人(以及我进一步忽略的许多其他对象)并返回一个或多个人掩码,即布尔 Numpy 数组,其中包含归类为“人”的所有像素的 True 值和所有其他像素的 False 值:
因此,当在图片中检测到多个人时,输入的图像(形状为 (3900,2922,3) 的 uint8 数组)成为一个掩码(形状为布尔数组 (3900,2922))或多个掩码。
现在我可以使用这个蒙版通过一些简单的 Numpy 数组索引将人从图像中删除:
mask3d = np.dstack([mask]*3)
cut_out_mask = np.invert(mask3d)
res = np.where(cut_out_mask, 0, image)
由于 Mask_RCNN 程序返回的掩码非常紧凑,我想添加几个像素的边距(比如说 15px),这样我就会得到这样的结果:
我可以利用哪些 Numpy/OpenCV 函数从原始图像中切出遮罩(类似于 np.where),在遮罩周围添加 15 像素的边距?
【问题讨论】:
-
您正在寻找
cv2.dilate。这个想法是先扩大掩码,然后按位 - 并使用原始输入图像
标签: python image numpy opencv image-processing