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

为何Pytesseract无法识别黑底白字?代码运行异常求助

解决Pytesseract识别黑底白字图片的问题

首先咱们得明确:Tesseract OCR默认是针对白底黑字的图片优化的,黑底白字的图片直接识别很容易出问题,这是你当前遇到的核心问题之一。另外裁剪后识别为空,大概率是缺少必要的预处理步骤,或者裁剪后的图片特征不够明显。

下面给你几个亲测有效的解决步骤:

1. 反转图片颜色(核心操作!)

把黑底白字转成白底黑字,完全贴合Tesseract的默认识别逻辑。用PIL的ImageOps.invert()就能轻松实现:

import pytesseract
from PIL import Image, ImageOps

pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
im = Image.open('topLine.png')

# 反转颜色:黑底白字 → 白底黑字
inverted_im = ImageOps.invert(im)
print(pytesseract.image_to_string(inverted_im))

2. 增加预处理强化文本特征

如果反转后还是有乱码或识别不全的情况,可以加上二值化处理,把图片转成纯黑白(只有0和255的像素值),进一步过滤噪点、强化文本边缘:

import pytesseract
from PIL import Image, ImageOps

pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
im = Image.open('topLine.png')

# 反转颜色
inverted_im = ImageOps.invert(im)
# 二值化处理(阈值可根据你的图片调整,127是通用分界值)
threshold = 127
binary_im = inverted_im.point(lambda x: 0 if x < threshold else 255, '1')
print(pytesseract.image_to_string(binary_im))

3. 针对裁剪后图片的优化方案

如果你裁剪了图片但识别为空,大概率是裁剪后的文本太小,或者Tesseract没启用适配单行文本的配置,可以试试这两个操作:

  • 放大裁剪后的图片(用resize()方法放大2-3倍,保持比例),让文本特征更清晰;
  • 给Tesseract加上单行文本识别的配置参数,减少误判:
# 配置参数:--psm 7 表示把输入当成单行文本处理,--oem 3 用默认OCR引擎
custom_config = r'--oem 3 --psm 7'
print(pytesseract.image_to_string(binary_im, config=custom_config))

4. 额外检查项

如果你的文本包含特殊字符或非英文内容,要确保Tesseract安装了对应的语言包,识别时可以通过lang参数指定,比如lang='eng'(英文)。

最后再提一句:如果裁剪后的图片文本特别小,放大操作是必须的——Tesseract对过小的文本识别率会急剧下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:16