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
相关产品推荐
相关产品推荐

