Python 图像ROI中的平均像素

Python 图像ROI中的平均像素,python,image,opencv,tensorflow,image-processing,Python,Image,Opencv,Tensorflow,Image Processing,我有下面的图像,我想对图像中的每个遮罩区域(而不是边界框)应用平均值 正如您所看到的,现在,在热图上,这些区域内部的值不断变化。有些像素是黄色的,有些是紫色的。我希望这不是面具里面的情况 所以我需要做的是(我想): 找到与遮罩对应的坐标 平均这些坐标内的像素数 下面是如何找到面具的: file_names = glob(os.path.join(IMAGE_DIR, "*.jpg")) masks_prediction = np.zeros((521, 768, len(file_name

我有下面的图像,我想对图像中的每个遮罩区域(而不是边界框)应用平均值

正如您所看到的,现在,在热图上,这些区域内部的值不断变化。有些像素是黄色的,有些是紫色的。我希望这不是面具里面的情况

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

  • 找到与遮罩对应的坐标
  • 平均这些坐标内的像素数
下面是如何找到面具的:

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

以下是您的代码的外观:

mask = masks[:, :, i]
avg_masked_value = cv2.mean(original_image,mask)
其中,原始图像是您加载的原始图像,平均屏蔽值将包含平均值的3x1数组