Swallowtail / app.py
Schrodingers's picture
Update app.py
8711191
import gradio as gr
import cv2
import numpy as np
# Function to perform image segmentation using OpenCV Watershed Algorithm
def watershed_segmentation(input_image, scribble_image):
# Load the input image and scribble image
image = cv2.cvtColor(input_image.astype('uint8'), cv2.COLOR_RGBA2BGR)
scribble = cv2.cvtColor(scribble_image.astype('uint8'), cv2.COLOR_RGBA2GRAY)
# Convert scribble to markers (0 for background, 1 for unknown, 2 for foreground)
markers = np.zeros_like(scribble)
markers[scribble == 0] = 0
markers[scribble == 255] = 1
markers[scribble == 128] = 2
# Apply watershed algorithm
cv2.watershed(input_image, markers)
# Create a segmented mask
segmented_mask = np.zeros_like(input_image, dtype=np.uint8)
segmented_mask[markers == 2] = [0, 0, 255] # Red color for segmented regions
return segmented_mask
# Gradio interface
input_image = gr.inputs.Image(type='pil', label="Upload an image")
scribble_image = gr.inputs.Image(type='pil', label="Scribble on the image")
output_image = gr.outputs.Image(type='pil', label="Segmented Image")
gr.Interface(
fn=watershed_segmentation,
inputs=[input_image, scribble_image],
outputs=output_image,
title="Swallowtail Image Segmentation Algorithm",
description="Upload an image and scribble on it to perform segmentation.",
).launch()