当前位置:首页>python>别再手动输入了!用Python OpenCV识别图片中的测绘坐标数据

别再手动输入了!用Python OpenCV识别图片中的测绘坐标数据

  • 2026-10-11 08:36:43
别再手动输入了!用Python OpenCV识别图片中的测绘坐标数据

你们有没有遇到这种情况:

甲方给了你一沓扫描的坐标表格、Excel表格照片让你录入系统。你看着几百个数据点欲哭无泪——一个一个手写输入得录到猴年马月?

今天跟你们聊个黑科技:用OpenCV + OCR从图片里自动提取坐标数据。


什么场景能用?

1. 扫描件录入

老的纸质记录本、扫描的坐标表——拍照或扫描成图片,脚本自动识别提取。

2. 现场照片

同事在现场拍的仪表盘、记录纸——直接识别出数字,省得再手动抄一遍。

3. 报表截图

Excel截图、Word里的表格图——识别后导出成可直接用的数据。


技术路线

两部分组成:

OpenCV负责图像预处理:

  • 灰度转换
  • 去噪
  • 二值化
  • 形态学处理

Tesseract负责文字识别:

  • OCR引擎
  • 数字/字母识别

整体流程:

  1. 读取图片
  2. 预处理(去噪、增强对比度)
  3. 定位文字区域
  4. OCR识别
  5. 解析坐标格式
  6. 导出CSV/Excel

完整测试代码

先别急着找图片,复制这段代码跑一下模拟流程:

import reimport pandas as pd# 模拟OCR识别结果# 假设这是从图片中识别出来的文字ocr_result = """测量坐标记录表点号    X坐标        Y坐标        高程P001   500000.00   3500000.00   156.50P002   500010.00   3500010.00   157.20P003   500020.00   3500020.00   156.80P004   500030.00   3500030.00   155.90P005   500040.00   3500040.00   156.10"""print("=" * 50)print("原始OCR识别结果:")print("=" * 50)print(ocr_result)print("=" * 50)print("解析坐标数据:")print("=" * 50)# 用正则表达式解析坐标# 匹配格式:P001   500000.00   3500000.00   156.50pattern = r'(P\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)'matches = re.findall(pattern, ocr_result)# 转换为DataFramedata = []formatchin matches:    point_id, x, y, z = match    data.append({'点号': point_id,'X': float(x),'Y': float(y),'Z': float(z)    })df = pd.DataFrame(data)print(df)print("\n" + "=" * 50)print("数据统计:")print("=" * 50)print(f"共识别 {len(df)} 个坐标点")print(f"X范围: {df['X'].min():.2f} - {df['X'].max():.2f}")print(f"Y范围: {df['Y'].min():.2f} - {df['Y'].max():.2f}")print(f"高程范围: {df['Z'].min():.2f}m - {df['Z'].max():.2f}m")# 导出CSVoutput = 'recognized_coords.csv'df.to_csv(output, index=False, encoding='utf-8-sig')print(f"\n已导出: {output}")

跑完你会看到:识别结果→解析→DataFrame→导出CSV,整个流程几分钟就完成了。

注意:上面的代码是模拟OCR结果。实际使用时,把ocr_result替换成pytesseract识别出来的文字就行:

import cv2import pytesseract# 读取图片img = cv2.imread('coordinate_photo.png')# 预处理gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)# OCR识别text = pytesseract.image_to_string(binary, config='--psm 6')# 后续解析同上...

几个要点

图片质量

识别效果取决于图片清晰度。拍的时候手别抖,尽量正对,光线均匀。

参数调优

--psm 6是单列文本模式,针对坐标列表效果比较好。不同场景可能需要换参数。

格式解析

识别出来的是字符串,得用正则表达式解析成X,Y,Z格式。不同坐标格式规则不一样,根据实际调整。


补充一下

我们队里老张以前最烦录数据这事儿,一坐就是一下午。后来我给他鼓捣了这个,现在他现场拍个照、回来跑脚本,几秒钟数据就出来了。

这技术不新鲜,但真的好用。省下的时间陪家人不香吗。

按需调整参数,可以提取更多字段。

#Python#OpenCV#OCR#Tesseract#图片识别坐标#测绘数据自动录入#扫描件处理#现场照片识别#正则解析坐标#导出CSV#告别手动输入#测绘黑科技

以往文章合集:

1.HouanSoftware套件介绍

2.HouanSoftware套件之AutoCAD插件使用说明

3.HouanSoftware套件之应用程序使用说明

4.python在测绘领域的应用

最新文章

随机文章