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

使用OpenCV预处理后Tesseract OCR无法提取图像文本求助

OCR识别失效问题修复方案

核心问题定位

你现有预处理步骤未覆盖两个关键适配要求:

  1. 目标图像为浅色文字+深色背景,与Tesseract默认的「深色文字+浅色背景」识别要求不匹配
  2. 预处理参数(缩放比例、核大小、分页模式)适配错误,导致文字特征丢失

可直接使用的优化后代码

import pytesseract
import cv2
import numpy as np

# 配置项
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
image_path = "C:/Users//opencv_test/images/"
ocr_path = "C:/Users//opencv_test/ocr/"
doc_file_name = "Image.jpeg"
ocr_file_name = doc_file_name[:-4] + ".txt"

def preprocess_image(img):
    # 放大图像提升文字像素占比
    img = cv2.resize(img, None, fx=1.5, fy=1.5, interpolation=cv2.INTER_CUBIC)
    # 转灰度
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 反色处理:将浅色文字转深色、深色背景转浅色
    gray = cv2.bitwise_not(gray)
    # OTSU二值化,自动过滤背景纹理
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    # 2x2核做开运算,消去背景噪点
    kernel = np.ones((2, 2), np.uint8)
    processed = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)
    # 可注释掉以下两行关闭预览
    cv2.imshow("Processed Image", processed)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return processed

# 读取图像
img = cv2.imread(image_path + doc_file_name, 1)
processed_img = preprocess_image(img)

# 调用Tesseract识别,psm 6表示假设图像是单个统一文本块
text = pytesseract.image_to_string(processed_img, config='--psm 6 -l eng')
text = text.replace('-\n', '')

# 保存结果
with open(ocr_path + ocr_file_name, 'w', encoding='utf-8') as f:
    f.write(text)

优化点说明

  • 新增反色处理,匹配Tesseract的识别场景要求
  • 放大图像1.5倍,提升低分辨率文字的特征辨识度
  • 用OTSU二值化替代自适应阈值,避免背景不均匀带来的噪点
  • 调整形态学核为2x2,有效消除背景杂点同时不损失文字轮廓
  • Tesseract分页模式改为--psm 6,比默认的自动分页更适配单文本块场景,指定英文语言包进一步降低识别误差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:57:04