|
import cv2 |
|
import numpy as np |
|
import gradio as gr |
|
|
|
def create_edge_map(image, scale_value): |
|
|
|
if len(image.shape) > 2 and image.shape[2] == 3: |
|
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) |
|
else: |
|
gray = image |
|
|
|
|
|
blurred = cv2.GaussianBlur(gray, (5, 5), 0) |
|
|
|
|
|
gradient_x = cv2.Sobel(blurred, cv2.CV_64F, 1, 0, ksize=5) |
|
|
|
|
|
gradient_y = cv2.Sobel(blurred, cv2.CV_64F, 0, 1, ksize=5) |
|
|
|
|
|
magnitude = np.sqrt(gradient_x**2 + gradient_y**2) |
|
|
|
|
|
edge_map = cv2.normalize(magnitude, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) |
|
|
|
|
|
edge_map = cv2.addWeighted(edge_map, scale_value, np.zeros_like(edge_map), 0, 0) |
|
|
|
return edge_map |
|
|
|
|
|
def edge_map_function(image, scale_value): |
|
|
|
image_np = np.array(image) |
|
|
|
|
|
edge_map = create_edge_map(image_np, scale_value) |
|
|
|
|
|
return edge_map |
|
|
|
|
|
inputs = [ |
|
gr.Image(label="Upload Image"), |
|
gr.Slider(minimum=1, maximum=5, label="Edges Scale") |
|
] |
|
|
|
output = gr.Image(label="Edges Map") |
|
|
|
|
|
gr.Interface(fn=edge_map_function, inputs=inputs, outputs=output, title="Edges Generator").launch() |
|
|