You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python去除茶叶图像背景,仅保留单片茶叶区域

茶叶图像背景去除实现方案

通用的OpenCV背景去除方案大多没有针对茶叶和浅背景的颜色特征做优化,所以直接套用效果不佳。你可以用HSV颜色空间做特征分割,适配这类目标和背景颜色差异明显的场景,完整实现流程和代码如下:

实现步骤

  • 转换颜色空间:将默认读取的BGR格式图像转为HSV空间,该空间分离了色相、饱和度、明度三个维度,能大幅降低光照变化对颜色判断的干扰
  • 设定分割阈值:根据茶叶的颜色范围设定HSV高低阈值,过滤掉背景区域,样例图像的初始可用阈值范围为lower_tea = (10, 20, 20)、upper_tea = (90, 255, 255),你可以根据自己的全量数据集微调数值
  • 优化掩码:初始生成的分割掩码会有噪点和空洞,用形态学开运算去除背景区域的零散噪点,再用闭运算填补茶叶区域的小孔
  • 生成结果:将掩码作为alpha通道和原图像合并,输出透明背景的茶叶图像

可运行代码

import cv2
import numpy as np

def remove_tea_bg(input_path, output_path):
    # 读取输入图像
    img = cv2.imread(input_path)
    # 转换到HSV颜色空间
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 茶叶HSV阈值,可根据实际数据调整
    lower_bound = np.array([10, 20, 20])
    upper_bound = np.array([90, 255, 255])
    # 生成初始分割掩码
    mask = cv2.inRange(hsv_img, lower_bound, upper_bound)
    # 形态学操作优化掩码
    kernel = np.ones((5, 5), np.uint8)
    # 开运算去除背景噪点
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=2)
    # 闭运算填补茶叶内部空洞
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=2)
    # 合并alpha通道生成透明背景图
    b, g, r = cv2.split(img)
    result_img = cv2.merge((b, g, r, mask))
    # 保存为png格式保留透明通道
    cv2.imwrite(output_path, result_img)

# 调用示例
# remove_tea_bg("tea_input.jpg", "tea_output.png")

优化建议

  • 如果你的数据集包含不同品类的干茶(比如红茶、乌龙茶等颜色偏褐红的茶叶),可以先对每个品类单独标定HSV阈值,分割精度会更高
  • 如果茶叶边缘有杂色残留,可以对最终掩码做1-2次高斯模糊后再合并,边缘过渡会更自然
  • 遇到茶叶和背景颜色接近的特殊样本时,可以将本方案得到的掩码作为初始输入传入GrabCut算法做二次优化,比直接调用GrabCut的效率和精度都更高

内容的提问来源于stack exchange,提问作者Katara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:03:03