Spaces:
Sleeping
Sleeping
| import cv2 | |
| import numpy as np | |
| import gradio as gr | |
| def extract_outline(image): | |
| # Convert to grayscale | |
| gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| # Set default Gaussian blur kernel size | |
| blur_kernel_size = (5, 5) | |
| blurred = cv2.GaussianBlur(gray, blur_kernel_size, 0) | |
| # Set default Canny edge detection thresholds | |
| lower_threshold = 50 | |
| upper_threshold = 150 | |
| edges = cv2.Canny(blurred, lower_threshold, upper_threshold) | |
| # Morphological operations to close gaps | |
| kernel = np.ones((3, 3), np.uint8) | |
| closed_edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) | |
| # Apply morphological thinning to get single-pixel-wide lines | |
| thinned = cv2.ximgproc.thinning(closed_edges) | |
| # Invert colors for white background and black outline | |
| skeleton_on_white = cv2.bitwise_not(thinned) | |
| return skeleton_on_white | |
| # Define the Gradio interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## Basic Outline Extractor") | |
| gr.Markdown("Upload an image to extract its outline with default settings.") | |
| with gr.Row(): | |
| image_input = gr.Image(type="numpy", label="Input Image") | |
| output_image = gr.Image(type="numpy", label="Output Outline Image") | |
| process_button = gr.Button("Generate Outline") | |
| process_button.click(fn=extract_outline, inputs=image_input, outputs=output_image) | |
| # Launch the Gradio app | |
| demo.launch() | |