我正在尝试使用DeepLab v3来检测对象并掩盖实际对象所在的位置。
DeepLab模型会生成一个resized_im
(3D)和一个掩码seg_map
(2D),它们分别为0和非零值,0表示背景。
当前,只能在对象上绘制带有覆盖蒙版的图像。我想从具有透明背景的resized_im
中裁剪出对象。对这项工作有什么建议吗?
我也在这里尝试过:How to crop image based on binary mask,但似乎没有一个适合我的情况
答案 0 :(得分:1)
您只需要将分割蒙版转换为布尔numpy数组,然后将其乘以图像即可。不要忘记您的图像有3个通道,而遮罩只有1个通道。它可能看起来像这样:
# seg_map - segmentation mask from network, resized_im - your input image
mask = np.greater(seg_map, 0) # get only non-zero positive pixels/labels
mask = np.expand_dims(mask, axis=-1) # (H, W) -> (H, W, 1)
mask = np.concatenate((mask, mask, mask), axis=-1) # (H, W, 1) -> (H, W, 3), (don't like it, so if you know how to do it better, please let me know)
crops = resized_im * mask # apply mask on image
如果要选择某些标签,可以使用其他逻辑numpy函数,例如:
mask = np.equal(seg_map, 5) # to get only objects with label 5