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):
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.