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

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:02:58