首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用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/

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OgVwr9XKsVMegr0nZkfk-Yyw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券