Spaces:
Sleeping
Sleeping
import numpy as np | |
from PIL import Image | |
import cv2 | |
def save_uploadedfile(uploaded_image, save_path): | |
im = Image.open(uploaded_image) | |
if im.mode in ("RGBA", "P"): | |
im = im.convert("RGB") | |
im.save(save_path) | |
def overlay(image, mask, color, alpha, resize=None): | |
"""Combines image and its segmentation mask into a single image. | |
Params: | |
image: Training image. np.ndarray, | |
mask: Segmentation mask. np.ndarray, | |
color: Color for segmentation mask rendering. tuple[int, int, int] = (255, 0, 0) | |
alpha: Segmentation mask's transparency. float = 0.5, | |
resize: If provided, both image and its mask are resized before blending them together. | |
tuple[int, int] = (1024, 1024)) | |
Returns: | |
image_combined: The combined image. np.ndarray | |
""" | |
colored_mask = np.expand_dims(mask, 0).repeat(3, axis=0) | |
colored_mask = np.moveaxis(colored_mask, 0, -1) | |
masked = np.ma.MaskedArray(image, mask=colored_mask, fill_value=color) | |
image_overlay = masked.filled() | |
if resize is not None: | |
image = cv2.resize(image.transpose(1, 2, 0), resize) | |
image_overlay = cv2.resize(image_overlay.transpose(1, 2, 0), resize) | |
image_combined = cv2.addWeighted(image, 1 - alpha, image_overlay, alpha, 0) | |
return image_combined | |
def apply_masks(img, masks): | |
for mask in masks: | |
h, w, _ = img.shape | |
mask = cv2.resize(mask, (w, h)) | |
img = overlay(img, mask, color=(0, 255, 0), alpha=0.3) | |
return img | |