首页 > 解决方案 > 从图像中提取线向量

问题描述

FP 图像 矢量化示例

我有一张高分辨率图像(平面图图像),其像素大小为 9000 x 6000。

图像非常干净(没有噪点),所有线条的粗细均为 1 像素。

我需要将此光栅图像转换为矢量格式,例如 dxf 或 geojson。

我找到了几个工具来完成这项工作,例如 wintopo、potrace 和 Qgis 光栅到矢量函数,但这些不是 API(wintopo)或仅转换为多边形,而不是线段。

有没有办法从图像中提取线向量,或者至少找到线像素坐标?(我也使用了 OpenCV,但没有函数跟踪像素,只跟踪像素集的边界。)

标签: pythonvectorization

解决方案


存在一些基于学习的方法,例如:

一个 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)

要点来源

结果不太好,也许你应该上传一张干净的图片!


推荐阅读