简体   繁体   中英

Averaging pixels in image ROI

I have the following image and I would like to apply averaging on each masked region ( not the bounding box ) in the image.

在此处输入图片说明

As you can see, right now, the regions have changing values inside them on the heat map. Some pixels are yellowish, some are purplish. I want this to be not the case inside the masks.

So what I need to do is (I guess):

  • to find which coordinates correspond to the masks
  • average the pixels within these coordinates

Here is how the masks are found:

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

Here is the function which applies the masks:

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

and in the main file, here is how it is used:

mask = masks[:, :, i]
if show_mask:
     masked_image = apply_mask(masked_image, mask, color)

So I need to make a modification in somewhere here but I don't know where exactly.

I think the mask you are looking for is provided by the code :

mask = masks[:, :, i]

where i refers to the number of mask you have.

You can obtain the average values of the mask region from the original image using the openCV function mean

Here is how your code should look like:

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

where original_image is the original image you loaded and avg_masked_value will contain 3x1 array of averaged value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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