使用pytesseract读取水表数字返回空字符串,求解决思路
解决Tesseract读取水表数字返回空字符串的问题
你的核心问题是阈值处理方向错误:水表数字是黑底白字,原代码用THRESH_BINARY会将白色数字转为黑色、黑色背景转为白色,和Tesseract默认识别白底黑字的逻辑冲突,导致无法识别。以下是针对性的改进方案:
改进步骤
- 先将彩色图转为灰度图,减少颜色干扰
- 使用
THRESH_BINARY_INV反转阈值,得到白底黑字的图像 - 增加降噪处理,提升识别稳定性
- 指定Tesseract仅识别数字,缩小识别范围
修改后的代码
import cv2 import numpy as np import pytesseract image = "./asset/test5.jpg" # 读取图片并转为灰度图 img = cv2.imread(image) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊降噪(可选但能提升识别率) blurred_img = cv2.GaussianBlur(gray_img, (3, 3), 0) # 反转阈值处理,生成白底黑字的图像 ret, processed_img = cv2.threshold(blurred_img, 125, 255, cv2.THRESH_BINARY_INV) # 配置Tesseract仅识别数字,指定识别模式 custom_config = r'--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789' text = pytesseract.image_to_string(processed_img, config=custom_config) # 输出结果(去除多余空白) print(text.strip())
参数说明
THRESH_BINARY_INV:反转二值化,将黑底白字转为白底黑字,匹配Tesseract默认识别逻辑GaussianBlur:消除图片细微噪点,避免干扰字符识别custom_config:--psm 7:告诉Tesseract当前是单行文本(如果水表数字是分散的单个字符,可改为--psm 10)tessedit_char_whitelist=0123456789:限定仅识别数字,过滤无关干扰
- 若识别效果仍不佳,可调整阈值参数(比如把125改为100或150),或尝试形态学膨胀操作让数字边缘更清晰
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

