本文将介绍如何使用 Python 的 Gradio 库构建一个简单的图像处理 Web 应用,支持常见的图像效果如灰度转换、像素化、模糊处理、边缘检测、色彩反转、色调变换等,并提供完整源码。
背景介绍
随着人工智能与图像处理技术的普及,我们经常需要快速测试各种图像效果。传统方式需要编写 GUI 或命令行脚本,使用门槛较高。而Gradio作为一个强大的开源工具,可以让我们用最少的代码快速搭建交互式 Web 界面,特别适合机器学习与图像处理的可视化演示。
项目功能一览
本项目支持如下图像处理效果:
灰度图
像素风格图
二值化图
模糊图
边缘检测图
色彩反转图
色调转换图
界面示意如下:
【此处可插入运行后的 Gradio 页面截图】
环境依赖
使用以下命令安装所需依赖:
pip install gradio pillow numpy
🧠 代码实现解析
1️⃣ 导入库
import gradio as gr
from PIL import Image, ImageFilter, ImageOps
import numpy as np
使用Pillow(PIL)进行图像处理,Gradio构建前端交互界面,NumPy用于处理 HSV 色调变换。
2️⃣ 图像处理函数定义
灰度转换
def convert_to_grayscale(img):
return img.convert("L")
像素化
def convert_to_pixel(img):
img = img.resize((32, 32), resample=Image.NEAREST)
return img.resize((256, 256), resample=Image.NEAREST)
二值化处理
def convert_to_binary(img):
gray = img.convert("L")
bw = gray.point(lambda x: 255 if x > 128 else 0, '1')
return bw.convert("RGB")
模糊处理
def convert_to_blur(img):
return img.filter(ImageFilter.BLUR)
边缘检测
def convert_to_edge(img):
return img.filter(ImageFilter.FIND_EDGES)
色彩反转
def convert_to_invert(img):
return ImageOps.invert(img)
色调变换(Hue Shift)
def convert_to_hue_shift(img):
hsv = img.convert("HSV")
h, s, v = hsv.split()
np_h = np.array(h, dtype=np.uint16)
np_h = (np_h + 30) % 256
h_shifted = Image.fromarray(np_h.astype('uint8'), 'L')
return Image.merge("HSV", (h_shifted, s, v)).convert("RGB")
3️⃣ 整合选择逻辑
python复制编辑def process_image(image, effect):
if effect == "灰度图":
return convert_to_grayscale(image)
elif effect == "像素图":
return convert_to_pixel(image)
elif effect == "二值化图":
return convert_to_binary(image)
elif effect == "模糊图":
return convert_to_blur(image)
elif effect == "边缘检测图":
return convert_to_edge(image)
elif effect == "色彩反转图":
return convert_to_invert(image)
elif effect == "色调转换图":
return convert_to_hue_shift(image)
return image
4️⃣ 构建 Gradio 界面
python复制编辑effect_dropdown = gr.Dropdown(
choices=["灰度图", "像素图", "二值化图", "模糊图", "边缘检测图", "色彩反转图", "色调转换图"],
label="选择图像处理方式"
)
iface = gr.Interface(
fn=process_image,
inputs=[gr.Image(type="pil"), effect_dropdown],
outputs=gr.Image(type="pil"),
title="图像处理工具",
description="支持灰度、像素、模糊、边缘检测、二值化、反色、色调转换"
)
iface.launch()
只需一行iface.launch()就能启动本地 Web 服务。
所有源代码:
import gradio as gr
from PIL import Image, ImageFilter, ImageOps
import numpy as np
def convert_to_grayscale(img):
return img.convert("L")
def convert_to_pixel(img):
img = img.resize((32, 32), resample=Image.NEAREST)
return img.resize((256, 256), resample=Image.NEAREST)
def convert_to_binary(img):
gray = img.convert("L")
bw = gray.point(lambda x: 255 if x > 128 else 0, '1')
return bw.convert("RGB")
def convert_to_blur(img):
return img.filter(ImageFilter.BLUR)
def convert_to_edge(img):
return img.filter(ImageFilter.FIND_EDGES)
def convert_to_invert(img):
return ImageOps.invert(img)
def convert_to_hue_shift(img):
hsv = img.convert("HSV")
h, s, v = hsv.split()
np_h = np.array(h, dtype=np.uint16)
np_h = (np_h + 30) % 256
h_shifted = Image.fromarray(np_h.astype('uint8'), 'L')
return Image.merge("HSV", (h_shifted, s, v)).convert("RGB")
def process_image(image, effect):
if effect == "灰度图":
return convert_to_grayscale(image)
elif effect == "像素图":
return convert_to_pixel(image)
elif effect == "二值化图":
return convert_to_binary(image)
elif effect == "模糊图":
return convert_to_blur(image)
elif effect == "边缘检测图":
return convert_to_edge(image)
elif effect == "色彩反转图":
return convert_to_invert(image)
elif effect == "色调转换图":
return convert_to_hue_shift(image)
return image
effect_dropdown = gr.Dropdown(
choices=["灰度图", "像素图", "二值化图", "模糊图", "边缘检测图", "色彩反转图", "色调转换图"],
label="选择图像处理方式"
)
iface = gr.Interface(
fn=process_image,
inputs=[gr.Image(type="pil"), effect_dropdown],
outputs=gr.Image(type="pil"),
title="图像处理工具",
description="支持灰度、像素、模糊、边缘检测、二值化、反色、色调转换"
)
iface.launch() 效果展示
以下是部分图像处理效果截图展示:
灰度图:
色调反转图
项目链接
感兴趣的朋友可以尝试。
https://zentorno-tu.hf.space/
领取专属 10元无门槛券
私享最新 技术干货