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

如何对图像中与背景同色的低可见度数字进行OCR识别?

优化方案

预处理核心优化点

  • 灰度转换后追加CLAHE自适应直方图均衡,解决局部亮度不均、对比度低的问题
  • 替换全局阈值为自适应高斯阈值,适配光照不均匀的裁剪图像
  • 增加形态学开运算过滤细碎噪点,避免噪点干扰字符特征提取
  • 按需放大图像2~3倍,OCR模型对小尺寸字符的识别精度会明显提升

完整可运行代码

import cv2
import matplotlib.pyplot as plt
import pytesseract

def display(img,cmap='gray'):
    fig = plt.figure(figsize=(12,10))
    ax = fig.add_subplot(111)
    ax.imshow(img,cmap='gray')

# 读取图像
img = cv2.imread("/content/PXL_20211019_171419721.MP.jpg")
# 转灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 1. 对比度增强
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
enhanced_gray = clahe.apply(gray)

# 2. 自适应高斯阈值二值化
binary = cv2.adaptiveThreshold(enhanced_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 3. 形态学去噪
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
denoised = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)

# 4. 放大图像
scaled = cv2.resize(denoised, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

# 查看预处理结果
display(scaled)

# Tesseract识别,指定只识别数字、单字符行模式
result = pytesseract.image_to_string(scaled, config='--psm 8 --oem 3 -c tessedit_char_whitelist=0123456789')
print("识别结果:", result.strip())

识别参数说明

  • 如果你用PaddleOCR,可指定rec_char_type='en'并限制识别字符集为数字,同时关闭检测环节直接做识别,减少误判
  • 预处理参数可根据实际图像效果微调:比如阈值的块大小、形态学核的尺寸,适配不同清晰度的裁剪图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:04