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

使用cv2.adaptiveThreshold处理反光图像效果不佳 无法满足pytesseract识别需求

图像处理流程优化方案
  • 第一步:对比度增强:使用限制对比度自适应直方图均衡化(CLAHE)处理灰度图,解决局部反光、明暗不均的问题,避免直接阈值处理丢失文字特征。
  • 第二步:前置去噪:在阈值处理前加入高斯模糊/双边滤波,抑制图像噪点,防止阈值处理时噪点被误识别为文字轮廓。
  • 第三步:调整自适应阈值参数:适当调大块尺寸与常数C,过滤掉反光带来的背景干扰。
  • 第四步:后处理优化:加入形态学操作修复文字断笔,清除孤立的小噪点,提升文字连通性。
import cv2
import numpy as np

path = "path/to/image.jpg"
# 读取图像
rgb_img = cv2.imread(path)
gray_img = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY)

# 1. CLAHE对比度增强,处理反光不均
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
clahe_gray = clahe.apply(gray_img)

# 2. 高斯模糊去噪
blur_img = cv2.GaussianBlur(clahe_gray, (3,3), 0)

# 3. 自适应阈值处理,调整参数
thresholded_img = cv2.adaptiveThreshold(blur_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                       cv2.THRESH_BINARY_INV, 25, 4)

# 4. 形态学闭运算修复文字,去噪
kernel = np.ones((2,2), np.uint8)
final_img = cv2.morphologyEx(thresholded_img, cv2.MORPH_CLOSE, kernel, iterations=1)

# 展示结果
cv2.imshow('original', rgb_img)
cv2.imshow('processed for OCR', final_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数调整参考

  • 如果文字存在断笔,可适当调大形态学核尺寸,或者增加形态学操作的迭代次数
  • 如果背景残留噪点过多,可在3~6区间内调大自适应阈值的最后一个常数C
  • 如果输入图像分辨率较高,可将自适应阈值的块大小(倒数第二个参数)调整为31、41等更大的奇数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:27:00