用gradio快速构建一个图像处理 Web 工具(支持灰度、模糊、边缘检测等)

本文将介绍如何使用 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/

如果你觉得本文对你有帮助,欢迎点赞收藏支持!

发表回复