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

如何用OpenCV Python提取模糊点状浮雕序列号?

优化点状浮雕序列号的OCR提取方案

针对点状浮雕这类低辨识度的序列号,原方案的边缘检测+过度膨胀会破坏字符的点状结构,导致EasyOCR无法准确识别。以下是针对性的优化方案:

核心调整思路

  1. 放弃边缘检测,改用自适应阈值保留点状字符的完整轮廓
  2. 使用贴合点状结构的形态学核,避免过度膨胀导致字符粘连
  3. 限制OCR识别的字符集,减少干扰匹配

修改后的完整代码

import numpy as np
import cv2
from easyocr import Reader
from typing import List

reader = Reader(["en"], model_storage_directory="./model")

def process(image: bytes) -> List[str]:
    buff = np.frombuffer(image, np.uint8)
    # 读取彩色图后转灰度
    img = cv2.imdecode(buff, cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 自适应阈值处理:更适合光照不均的点状字符,保留细节
    thresh = cv2.adaptiveThreshold(
        gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2
    )
    
    # 使用十字形核做膨胀:贴合点状字符的连接结构,避免方形核过度模糊轮廓
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
    dilated = cv2.dilate(thresh, kernel, iterations=2)
    
    # 限制OCR识别字符集为数字+大写字母,过滤无关结果
    result = reader.readtext(
        dilated,
        allowlist='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        paragraph=False,
        detail=0
    )
    
    # 合并结果(如果识别为多个片段)
    return [' '.join(result).replace(' ', '')] if result else []

关键改动说明

  • 自适应阈值:替代Canny边缘检测,能在局部区域内自动调整阈值,更好保留点状字符的灰度差异,避免边缘丢失。
  • 十字形膨胀核:相比方形核,十字形更贴合点状字符的笔画延伸方向,膨胀后不会过度模糊字符的边界,减少字符粘连。
  • 字符集限制:通过allowlist指定仅识别数字和大写字母,排除EasyOCR可能误识别的特殊符号或小写字母,提升匹配精度。
  • 结果合并:如果OCR将序列号拆分为多个片段,自动合并为完整字符串,减少后续处理成本。

额外建议

如果仍有识别误差,可以尝试:

  • 对输入图像先做高斯模糊(cv2.GaussianBlur(gray, (3,3), 0)),减少背景噪点干扰
  • 调整自适应阈值的blockSize(奇数,如13、15)和C值(如3、4),适配不同的浮雕深浅
  • 尝试EasyOCR的adjust_contrast=True参数,增强图像对比度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:46:01