在实际项目中,Tesseract OCR的识别准确率不仅和模型有关,更受输入图像质量与运行参数影响。通过合理的图像预处理和配置策略,可以显著提升识别效果。

一、图像预处理策略
原始图像常常存在噪声、倾斜或对比度不足的问题,直接识别容易出错。建议按以下顺序处理。
1. 灰度化与二值化
将彩色图转为灰度图,再用阈值处理成黑白图像,可突出文字轮廓。
from PIL import Image
import cv2
# 读取图像并灰度化
img = cv2.imread('test.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 自适应二值化
binary = cv2.adaptiveThreshold(
gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2
)
cv2.imwrite('binary.png', binary)
2. 降噪与尺寸调整
使用 medianBlur 去除斑点噪声,并把图像放大到合适高度,通常文字高度在30像素以上效果更好。
# 中值滤波降噪 denoised = cv2.medianBlur(binary, 3) # 放大图像提升小字识别率 scale = 2 resized = cv2.resize(denoised, None, fx=scale, fy=scale, interpolation=cv2.INTER_CUBIC)
二、Tesseract配置策略
除了图像处理,合理设置识别参数也非常重要。
1. 页面分割模式PSM
PSM控制版面分析方式。单文本行用 --psm 7,统一区块用 --psm 6。
| PSM值 | 适用场景 |
|---|---|
| 6 | 假设为统一文本块 |
| 7 | 单行文本 |
| 11 | 稀疏文本无布局 |
2. 白名单与语言包
若只识别数字或英文,可设白名单减少干扰。下面用命令行指定英文并限制为数字:
tesseract input.png out --psm 7 -l eng digits
在代码中也可通过配置字典传入:
import pytesseract
from PIL import Image
img = Image.open('binary.png')
custom = r'--oem 3 --psm 7 -c tessedit_char_whitelist=0123456789'
text = pytesseract.image_to_string(img, config=custom)
print(text)
三、综合建议
- 优先保证图像清晰、对比强
- 根据内容选择对应PSM模式
- 不确定字符集时尽量不开白名单
- 英文与中文混排需加载对应语言包如 chi_sim+eng
通过上述图像预处理与配置策略的结合,Tesseract OCR识别效果通常能有肉眼可见的提升。
Tesseract_OCR图像预处理OCR配置修改时间:2026-07-27 17:12:22