我有以下图像,我想对图像中的每个蒙版区域(非边界框)应用平均值。
如您所见,现在,区域在热图中的内部具有变化的值。有些像素为淡黄色,有些为紫色。我希望这不是面具内部的情况。
所以我需要做的是(我想):
找到面具的方法如下:
file_names = glob(os.path.join(IMAGE_DIR, "*.jpg"))
masks_prediction = np.zeros((521, 768, len(file_names)))
for i in range(len(file_names)):
print(i)
image = skimage.io.imread(file_names[i])
predictions = model.detect([image], verbose=1)
p = predictions[0]
masks = p['masks']
merged_mask = np.zeros((masks.shape[0], masks.shape[1]))
for j in range(masks.shape[2]):
merged_mask[masks[:,:,j]==True] = True
masks_prediction[:,:,i] = merged_mask
这是应用遮罩的功能:
def apply_mask(image, mask, color, alpha=0.5):
"""Apply the given mask to the image.
"""
for c in range(3):
image[:, :, c] = np.where(mask == 1,
image[:, :, c] *
(1 - alpha) + alpha * color[c] * 255,
image[:, :, c])
return image
在主文件中,其用法如下:
mask = masks[:, :, i]
if show_mask:
masked_image = apply_mask(masked_image, mask, color)
所以我需要在这里的某个地方进行修改,但我不知道确切的位置。
答案 0 :(得分:1)
我认为您要查找的面具由代码提供:
mask = masks[:, :, i]
其中 i 是指您拥有的遮罩的数量。
您可以使用openCV函数mean
这是您的代码的外观:
mask = masks[:, :, i]
avg_masked_value = cv2.mean(original_image,mask)
其中 original_image 是您加载的原始图像,而avg_masked_value将包含3x1平均值数组。