Spaces:
Sleeping
Sleeping
File size: 3,461 Bytes
26d93ca 4d20656 26d93ca 4d20656 0d84ed0 4d20656 26d93ca 4d20656 26d93ca 4d20656 26d93ca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import gradio as gr
import cv2
import numpy as np
from skimage import io, segmentation
# 功能函數
def image_segmentation(image):
segments = segmentation.slic(image, n_segments=100, compactness=10)
return segmentation.mark_boundaries(image, segments)
def edge_detection(image, threshold1, threshold2):
edges = cv2.Canny(image, threshold1, threshold2)
return edges
def image_inpainting(image, mask):
# 確保影像和遮罩有相同的尺寸
if image.shape[:2] != mask.shape[:2]:
raise ValueError("影像和遮罩的尺寸不一致!")
# 將遮罩轉換為單通道(灰度)
if len(mask.shape) == 3:
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
# 修復影像
inpainted = cv2.inpaint(image, mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
return inpainted
def template_matching(image, template):
result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
matched_image = image.copy()
h, w = template.shape[:2]
cv2.rectangle(matched_image, max_loc, (max_loc[0] + w, max_loc[1] + h), (0, 255, 0), 2)
return matched_image
# Gradio 介面設置
def app_interface():
with gr.Blocks() as demo:
gr.Markdown("## 電腦視覺功能展示")
with gr.Tabs():
# 分割功能
with gr.Tab("影像分割"):
image_input = gr.Image(label="上傳影像", type="numpy")
seg_output = gr.Image(label="分割後影像")
seg_button = gr.Button("執行分割")
seg_button.click(image_segmentation, inputs=[image_input], outputs=[seg_output])
# 邊緣偵測
with gr.Tab("邊緣偵測"):
edge_input = gr.Image(label="上傳影像", type="numpy")
thresh1 = gr.Slider(0, 255, value=100, step=1, label="閾值 1")
thresh2 = gr.Slider(0, 255, value=200, step=1, label="閾值 2")
edge_output = gr.Image(label="邊緣偵測結果")
edge_button = gr.Button("執行邊緣偵測")
edge_button.click(edge_detection, inputs=[edge_input, thresh1, thresh2], outputs=[edge_output])
# 影像修復
with gr.Tab("影像修復"):
# 輸入影像與遮罩
inpaint_input = gr.Image(label="上傳影像", type="numpy")
mask_input = gr.Image(label="上傳遮罩 (白色為修復區域)", type="numpy")
# 輸出修復後影像
inpaint_output = gr.Image(label="修復後影像")
# 按鈕操作
inpaint_button = gr.Button("執行修復")
# 綁定影像修復函數到按鈕
inpaint_button.click(image_inpainting, inputs=[inpaint_input, mask_input], outputs=inpaint_output)
# 模板匹配
with gr.Tab("模板匹配"):
match_input = gr.Image(label="上傳影像", type="numpy")
template_input = gr.Image(label="上傳模板", type="numpy")
match_output = gr.Image(label="模板匹配結果")
match_button = gr.Button("執行匹配")
match_button.click(template_matching, inputs=[match_input, template_input], outputs=[match_output])
return demo
demo = app_interface()
demo.launch()
|