平均图像ROI中的像素

时间:2018-11-23 08:09:50

标签: python image opencv tensorflow image-processing

我有以下图像,我想对图像中的每个蒙版区域(非边界框)应用平均值。

enter image description here

如您所见,现在,区域在热图中的内部具有变化的值。有些像素为淡黄色,有些为紫色。我希望这不是面具内部的情况。

所以我需要做的是(我想):

  • 查找与遮罩相对应的坐标
  • 在这些坐标内平均像素

找到面具的方法如下:

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)

所以我需要在这里的某个地方进行修改,但我不知道确切的位置。

1 个答案:

答案 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平均值数组。