gpt4 book ai didi

python - 使用特定像素边距 numpy opencv 从图像中剪切蒙版

转载 作者:行者123 更新时间:2023-12-02 16:10:03 28 4
gpt4 key购买 nike

我正在玩在 COCO 数据集上训练的 Mask RCNN (https://github.com/matterport/Mask_RCNN) 分割程序。它检测图像中的人(以及我进一步忽略的许多其他对象)并返回一个或多个人掩码,即 bool Numpy 数组包含所有被归类为“人”的像素的真值和所有其他像素的假值:

Overlay Image

所以当在图片中检测到多人时,输入的图像(形状的uint8数组(3900,2922,3))就变成了掩码(形状的 bool 数组(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

由于 Mask_RCNN 程序返回的掩码非常紧凑,我想添加几个像素的边距(假设为 15 像素),以便我得到这样的结果:

manual

我可以利用哪些 Numpy/OpenCV 函数从原始图像中剪切蒙版(类似于 np.where),在蒙版周围添加 15 个像素的边距?

最佳答案

一种方法是使用 cv2.dilate 以增加口罩的表面积。根据您的 mask 形状,您可以使用 cv2.getStructuringElement 创建不同的结构元素形状和大小。 .例如,如果您的 mask 形状是矩形,您可能需要使用 cv2.MORPH_RECT或者如果您的面具形状是圆形,您可以使用 cv2.MORPH_ELLIPSE .此外,您可以更改内核大小和迭代次数以进行扩张。面膜扩张后,可以使用 cv2.bitwise_and 得到你的结果。这是一个最小的可重现示例:

原图



面具



扩张



按位与结果


import cv2

# Load image and mask
image = cv2.imread('1.png')
mask = cv2.imread('mask.png')

# Create structuring element, dilate and bitwise-and
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,25))
dilate = cv2.dilate(mask, kernel, iterations=3)
result = cv2.bitwise_and(image, dilate)

cv2.imshow('dilate', dilate)
cv2.imshow('result', result)
cv2.waitKey()

关于python - 使用特定像素边距 numpy opencv 从图像中剪切蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60490882/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com