python - 从图像中提取线向量
问题描述
我有一张高分辨率图像(平面图图像),其像素大小为 9000 x 6000。
图像非常干净(没有噪点),所有线条的粗细均为 1 像素。
我需要将此光栅图像转换为矢量格式,例如 dxf 或 geojson。
我找到了几个工具来完成这项工作,例如 wintopo、potrace 和 Qgis 光栅到矢量函数,但这些不是 API(wintopo)或仅转换为多边形,而不是线段。
有没有办法从图像中提取线向量,或者至少找到线像素坐标?(我也使用了 OpenCV,但没有函数跟踪像素,只跟踪像素集的边界。)
解决方案
存在一些基于学习的方法,例如:
- 技术图纸的深度矢量化(它们还提供预训练模型)
- 深SVG
一个 python 模块是pypotrace。我已经用你的图片试过了:
# Require imagemagick
# require potrace
# sudo apt-get install imagemagick potrace
import os
import argparse
import glob
parser = argparse.ArgumentParser()
parser.add_argument(
"files", type=str, help="png2svg", nargs="*"
)
parser.add_argument(
"-o", "--output", type=str, help="folder", default="./svgs/"
)
args = parser.parse_args()
for f in args.files:
print f
pnmname = f.split(".")[0] + ".pnm"
svgname = os.path.basename(f).split(".")[0] + ".svg"
os.system("convert %s %s" % (f, pnmname))
if not os.path.exists(args.output):
os.mkdir(args.output)
svgname = os.path.join(args.output, svgname)
os.system("potrace -s -o %s %s" % (svgname, pnmname))
os.remove(pnmname)
推荐阅读
- angular - Angular 8 路由重写失败
- jquery - 仅在特定区域拖放文件?
- maximo - 通过自动化脚本访问 DOM 元素
- json - 如何使用循环解析来自 JSON 中多个 URL 的内容 - Python 中的 Selenium
- swift - 创建一个颜色类
- python - 除了几个节点之外,如何运行管道?
- python - Python中的拆分和连接值
- flopy - 修改软盘包后如何写入新的输入文件?
- wakatime - 将域名设置为与 Wakatime 中的项目相关
- javascript - Amchart4 直到数据时间结束才显示来自 parseend 事件中的 json 文件