解决Pytesseract OCR输出内容垂直排列而非水平排列的问题
解决Pytesseract OCR输出内容垂直排列而非水平排列的问题
嘿,我懂你现在的困扰——用Pytesseract识别航点图片时,本该在同一行的纬度(lat)、经度(long)和高度(Alt)被识别成了上下垂直排列的格式,完全不是你想要的横向样式。别着急,咱们来试试这几个调整方法,应该能解决问题:
第一步:先给图片做预处理,让文字更清晰
有时候Tesseract识别出错,是因为图片的对比度不够,或者有杂噪干扰了它的布局判断。咱们可以先把图片转成灰度,再做二值化处理,强化文字和背景的对比:
import pytesseract as tess from PIL import Image import cv2 # 设置Tesseract的执行路径 tess.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 读取图片并做预处理 img = cv2.imread("wp1.png") # 转换为灰度图 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化处理(让文字变黑背景变白,或者反过来,看你的图片情况调整阈值) _, processed_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY_INV) # 用预处理后的图片做OCR识别 text = tess.image_to_string(processed_img)
第二步:调整Tesseract的页面分割模式(PSM)
Tesseract默认的页面分割模式可能不太适配你的航点布局,咱们可以指定PSM参数,告诉它要按“单一文本块”或者“单行文本”来识别:
# 自定义配置:oem 3是使用默认OCR引擎,psm 6表示把整个图片当作一个单一的文本块 custom_config = r'--oem 3 --psm 6' # 带配置参数的识别 text = tess.image_to_string(processed_img, config=custom_config)
如果你的航点确实是严格的单行文本,也可以把psm改成7(--psm 7),强制按单行解析。
第三步:兜底处理——手动把换行换成空格
要是前面的方法还是没搞定,咱们可以直接对识别后的文本做字符串处理,把所有的换行符替换成空格,强行合并成一行:
# 把识别结果里的换行符全部替换成空格 formatted_text = ' '.join(text.splitlines()) print(formatted_text)
这样不管识别时有没有换行,最终都会输出成lat long Alt这种你想要的横向格式。
一般来说,先做图片预处理,再调整PSM参数,基本就能解决垂直排列的问题啦,你可以根据自己图片的实际情况来试试这些方法~
备注:内容来源于stack exchange,提问作者Knight
相关产品推荐
相关产品推荐

