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

如何实现图像中多颜色多形状印章的自动去除?

多色多形状印章的通用处理方案

针对多色(红、蓝、紫等)、多形状(矩形、椭圆等)印章的处理痛点,现有方法局限性大,下面是几个可落地的通用解决思路:

  • 颜色空间分离+多通道阈值化
    别死磕RGB,转成HSV、Lab这类对颜色区分更友好的空间。比如HSV的H通道能精准定位不同色调的印章:红色对应H≈0/360区间,蓝色H≈240,紫色H≈270。对每个目标颜色的H通道单独做阈值分割,再结合S通道(饱和度)过滤低饱和的干扰色块,最后把各颜色的分割结果合并,就能覆盖多色印章的提取需求。
    简单伪代码示例:

    import cv2
    import numpy as np
    
    # 转HSV颜色空间
    hsv_img = cv2.cvtColor(src_img, cv2.COLOR_BGR2HSV)
    
    # 红色掩码(H通道是环形,分两段处理)
    lower_red1 = np.array([0, 120, 70])
    upper_red1 = np.array([10, 255, 255])
    lower_red2 = np.array([170, 120, 70])
    upper_red2 = np.array([180, 255, 255])
    red_mask = cv2.inRange(hsv_img, lower_red1, upper_red1) | cv2.inRange(hsv_img, lower_red2, upper_red2)
    
    # 蓝色掩码
    lower_blue = np.array([100, 120, 70])
    upper_blue = np.array([140, 255, 255])
    blue_mask = cv2.inRange(hsv_img, lower_blue, upper_blue)
    
    # 紫色掩码
    lower_purple = np.array([125, 120, 70])
    upper_purple = np.array([155, 255, 255])
    purple_mask = cv2.inRange(hsv_img, lower_purple, upper_purple)
    
    # 合并所有颜色掩码
    total_mask = red_mask | blue_mask | purple_mask
    
  • 通用形状特征匹配
    不要绑定特定形状,先提取掩码后的轮廓,再计算轮廓的核心特征来过滤:

    • 用cv2.minAreaRect()和cv2.fitEllipse()分别获取最小外接矩形、拟合椭圆
    • 用cv2.approxPolyDP()生成轮廓的近似多边形,统计顶点数
    • 结合轮廓的面积、周长、凸度、拟合误差这些指标判断:矩形印章的近似顶点数接近4,椭圆印章的拟合椭圆与轮廓的重叠度高
      实操时可以先统计一批样本的特征阈值,再做自适应判断,避免硬编码形状规则。
  • 纹理+颜色的混合过滤
    多数印章带有密集的文字或图案纹理,提取颜色掩码后,对掩码区域做纹理分析:比如计算局部方差、LBP特征,和背景区域做对比——印章区域的局部方差远大于平滑背景,用这个可以过滤掉同颜色的纯色干扰块(比如红色贴纸、蓝色色块)。

  • 小样本适配优化
    如果现有方法只适用于少数图像,核心问题是特征泛化性不够:

    • 收集不同场景的印章样本(不同光照、纸张、盖印力度),扩充数据集
    • 用数据增强(旋转、缩放、颜色扰动)让规则/模型适配更多情况
    • 把固定阈值换成Otsu自动阈值,适配不同光照下的颜色偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:45:42