pg56714's picture
Upload 13 files
7e0cd5c verified
raw
history blame
2.46 kB
import cv2
import numpy as np
from PIL import Image
from typing import Any, Dict, List
def load_img_to_array(img_p):
img = Image.open(img_p)
if img.mode == "RGBA":
img = img.convert("RGB")
return np.array(img)
def save_array_to_img(img_arr, img_p):
Image.fromarray(img_arr.astype(np.uint8)).save(img_p)
def dilate_mask(mask, dilate_factor=15):
mask = mask.astype(np.uint8)
mask = cv2.dilate(
mask,
np.ones((dilate_factor, dilate_factor), np.uint8),
iterations=1
)
return mask
def erode_mask(mask, dilate_factor=15):
mask = mask.astype(np.uint8)
mask = cv2.erode(
mask,
np.ones((dilate_factor, dilate_factor), np.uint8),
iterations=1
)
return mask
def show_mask(ax, mask: np.ndarray, random_color=False):
mask = mask.astype(np.uint8)
if np.max(mask) == 255:
mask = mask / 255
if random_color:
color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
else:
color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])
h, w = mask.shape[-2:]
mask_img = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
ax.imshow(mask_img)
def show_points(ax, coords: List[List[float]], labels: List[int], size=375):
coords = np.array(coords)
labels = np.array(labels)
color_table = {0: 'red', 1: 'green'}
for label_value, color in color_table.items():
points = coords[labels == label_value]
ax.scatter(points[:, 0], points[:, 1], color=color, marker='*',
s=size, edgecolor='white', linewidth=1.25)
def get_clicked_point(img_path):
img = cv2.imread(img_path)
cv2.namedWindow("image")
cv2.imshow("image", img)
last_point = []
keep_looping = True
def mouse_callback(event, x, y, flags, param):
nonlocal last_point, keep_looping, img
if event == cv2.EVENT_LBUTTONDOWN:
if last_point:
cv2.circle(img, tuple(last_point), 5, (0, 0, 0), -1)
last_point = [x, y]
cv2.circle(img, tuple(last_point), 5, (0, 0, 255), -1)
cv2.imshow("image", img)
elif event == cv2.EVENT_RBUTTONDOWN:
keep_looping = False
cv2.setMouseCallback("image", mouse_callback)
while keep_looping:
cv2.waitKey(1)
cv2.destroyAllWindows()
return last_point