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

Python调用Pytesseract识别图像矩阵时数字合并识别错误如何解决

矩阵数字识别合并问题解决方法

问题原因

Tesseract默认识别模式下未限制字符识别范围,会自动将紧密排列的相邻数字判定为同一个多位数,导致出现数字合并识别错误。

解决方法

1. 调整Tesseract识别配置

添加两个核心配置项优化识别效果:

  • 字符白名单:限制仅识别数字、空格、换行符,排除无关字符干扰
  • 页面分割模式(PSM):使用--psm 6模式,假定输入是统一的文本块,更适配规则排列的矩阵内容识别

2. 增加图像预处理(可选)

对原图做灰度化、二值化处理,提升数字和背景的对比度,进一步提升识别准确率

3. 后处理格式化

对识别结果做简单字符串处理,去除多余空行,统一数字间隔格式

修改后的完整代码如下:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 读取并预处理图像
matris_image = cv2.imread('matris23.png')
# 转灰度
gray = cv2.cvtColor(matris_image, cv2.COLOR_BGR2GRAY)
# 自适应二值化处理,提升对比度
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 配置tesseract参数
custom_config = r'--psm 6 -c tessedit_char_whitelist="0123456789 \n"'
matris = pytesseract.image_to_string(binary, config=custom_config)

# 后处理格式化输出
processed_lines = []
for line in matris.split('\n'):
    stripped_line = line.strip()
    if not stripped_line:
        continue
    nums = stripped_line.split()
    processed_lines.append(' '.join(nums))

# 输出最终结果
for line in processed_lines:
    print(line)

运行后即可得到预期的正确输出:

9 13 5 2
1 11 7 6
3 7 4 1
6 0 7 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03