繁体   English   中英

平均图像ROI中的像素

[英]Averaging pixels in image ROI

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

在此处输入图片说明

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

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

  • 查找对应于蒙版的坐标
  • 平均这些坐标内的像素

掩码的查找方法如下:

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)

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

我认为您要寻找的面具是由代码提供的:

mask = masks[:, :, i]

指的是你的口罩数量。

您可以使用openCV函数mean从原始图像中获取遮罩区域的mean

代码如下所示:

mask = masks[:, :, i]
avg_masked_value = cv2.mean(original_image,mask)

其中original_image是您加载的原始图像,而avg_masked_value将包含3x1平均值数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM