Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image | |
| def apply_color_filter(input_image, filter_type): | |
| # 將 Gradio 輸入的 numpy array 轉換為 Pillow 影像 | |
| pil_img = Image.fromarray(input_image.astype('uint8'), 'RGB') | |
| # 轉換為 OpenCV 格式 (BGR) | |
| cv_img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR) | |
| # 色彩轉換處理 | |
| if filter_type == "暖陽復古": | |
| processed = cv2.cvtColor(cv_img, cv2.COLOR_BGR2HSV) | |
| processed[:, :, 0] = 20 # 調整色相為暖黃色 | |
| processed[:, :, 1] = cv2.add(processed[:, :, 1], 50) # 增加飽和度 | |
| processed = cv2.cvtColor(processed, cv2.COLOR_HSV2BGR) | |
| elif filter_type == "柔和藍調": | |
| gray = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY) | |
| processed = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) | |
| processed[:, :, 0] = cv2.add(processed[:, :, 0], 80) # 增加藍色調 | |
| elif filter_type == "淡雅粉霧": | |
| processed = cv_img.copy() | |
| processed[:, :, 1] = cv2.subtract(processed[:, :, 1], 50) # 減少綠色調 | |
| processed[:, :, 2] = cv2.add(processed[:, :, 2], 70) # 增加紅色調 | |
| elif filter_type == "黑白柔光": | |
| gray = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY) | |
| processed = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) | |
| alpha = 0.7 | |
| overlay = np.full_like(processed, (240, 240, 240)) # 柔光效果 | |
| processed = cv2.addWeighted(overlay, alpha, processed, 1 - alpha, 0) | |
| elif filter_type == "清新綠野": | |
| processed = cv2.cvtColor(cv_img, cv2.COLOR_BGR2HSV) | |
| processed[:, :, 0] = 60 # 調整色相為綠色 | |
| processed[:, :, 1] = cv2.add(processed[:, :, 1], 40) # 增加飽和度 | |
| processed = cv2.cvtColor(processed, cv2.COLOR_HSV2BGR) | |
| else: | |
| processed = cv_img | |
| # 返回處理後的 RGB 圖片供 Gradio 輸出 | |
| return cv2.cvtColor(processed, cv2.COLOR_BGR2RGB) | |
| # Gradio 界面設計 | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## 🎨 圖片色彩魔法棒 - 人文風格") | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_image = gr.Image(label="上傳圖片") | |
| filter_choice = gr.Dropdown( | |
| choices=["暖陽復古", "柔和藍調", "淡雅粉霧", "黑白柔光", "清新綠野"], | |
| label="選擇色調風格", | |
| value="暖陽復古" | |
| ) | |
| submit_btn = gr.Button("施展魔法!") | |
| output_image = gr.Image(label="處理結果") | |
| submit_btn.click( | |
| fn=apply_color_filter, | |
| inputs=[input_image, filter_choice], | |
| outputs=output_image | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |