Files
novafarma/scripts/remove_magenta_specific.py

52 lines
1.5 KiB
Python

import cv2
import numpy as np
FILE_PATH = "/Users/davidkotnik/repos/novafarma/nova farma TRAE/assets/DEMO_FAZA1/Environment/water_clean_patch.png"
def remove_magenta_bg(file_path):
print(f"Processing {file_path}")
img = cv2.imread(file_path, cv2.IMREAD_UNCHANGED)
if img is None:
print("Failed to load image")
return
# If already RGBA, keep alpha. If RGB, add alpha.
if img.shape[2] == 3:
b, g, r = cv2.split(img)
a = np.ones_like(b) * 255
img = cv2.merge((b, g, r, a))
# Convert to HSV
hsv = cv2.cvtColor(img[:,:,0:3], cv2.COLOR_BGR2HSV)
# Magenta #FF00FF is (300 deg, 100%, 100%). In OpenCV (0-179, 0-255, 0-255):
# Hue ~ 150.
# Define range for Magenta
lower_magenta = np.array([145, 150, 150])
upper_magenta = np.array([165, 255, 255])
mask = cv2.inRange(hsv, lower_magenta, upper_magenta)
# Invert mask (keep non-magenta)
mask_inv = cv2.bitwise_not(mask)
# Get current alpha
b, g, r, a = cv2.split(img)
# Combine existing alpha with new mask
new_alpha = cv2.bitwise_and(a, mask_inv)
# Soften edges (1px blur on alpha)
# This helps remove jagged pink pixels
new_alpha = cv2.GaussianBlur(new_alpha, (3, 3), 0)
# Update image
final_img = cv2.merge((b, g, r, new_alpha))
cv2.imwrite(file_path, final_img)
print("Background removed and saved.")
if __name__ == "__main__":
remove_magenta_bg(FILE_PATH)