Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将PNG形状转换为KML或GeoJson_Python_Opencv_Image Processing_Geojson_Kml - Fatal编程技术网

Python 将PNG形状转换为KML或GeoJson

Python 将PNG形状转换为KML或GeoJson,python,opencv,image-processing,geojson,kml,Python,Opencv,Image Processing,Geojson,Kml,我有数千个形状存储为PNG文件和每个形状的边界坐标。边界坐标是形状最小封闭矩形的4个角的坐标(下面的示例) 目标是使用PNG图像及其边界坐标将其转换为多边形(KML或GeoJSON) 我甚至不确定我能用什么技术来达到这个结果,所以我很感激任何建议 输入数据(PNG): 形状最小封闭矩形的四个角的坐标:8.348236,44.66804,8.305321,44.66829,8.348579,44.63507,8.305492,44.63507 期望输出: 是一个要点,显示了解释位于地图正确

我有数千个形状存储为PNG文件和每个形状的边界坐标。边界坐标是形状最小封闭矩形的4个角的坐标(下面的示例)

目标是使用PNG图像及其边界坐标将其转换为多边形(KML或GeoJSON)

我甚至不确定我能用什么技术来达到这个结果,所以我很感激任何建议

输入数据(PNG):

  • 形状最小封闭矩形的四个角的坐标:
    8.348236,44.66804
    8.305321,44.66829
    8.348579,44.63507
    8.305492,44.63507
期望输出:

  • 是一个要点,显示了解释位于地图正确位置的PNG填充区域的结果。单击以查看原始GeoJSON
我如何想象这个过程:

  • 步骤1:我们有一个PNG图像和4个点。这让我们将PNG图像放置在地图上正确的位置,并适当地缩放它
  • 步骤2:我们识别形状关键点的位置
  • 步骤3:我们将一组已识别的点提取到多边形中

我以简单PNG为例,但形状可能要复杂得多:


好的,我将您的图像保存为
“shape.png”
,将您的GeoJSON封闭矩形保存为
“bounders.json”
。那么我的方法是:

  • 获取纬度和经度的北、东、南和西界限
  • 加载并修剪形状图像以去除所有黑色边框,阈值为纯黑白
  • 通过查看以像素和度为单位的图像宽度和高度,计算出从像素到度的X和Y缩放比例
  • 使用OpenCV
    findContours()
    查找形状图像中的顶点
  • 将我找到的所有顶点从图像坐标转换为纬度、经度
  • 将这些点写入JSON结果文件

以下是修剪后的图像:

以下是调试输出:

DEBUG: Nextent=44.66828662253787, Eextent=8.348579406738281, Sextent=44.63507036301143, Wextent=8.305320739746094
DEBUG: Trimmed image is "trimmed.png"
DEBUG: degppEW=8.634464469498503e-05, degppNS=6.0503204966194347e-05
DEBUG: Found shape with 6 vertices
DEBUG: Vertex 0: imageX=211, imageY=2, lon=8.323539459776736, lat=44.668165616127936
DEBUG: Vertex 1: imageX=2, imageY=224, lon=8.305493429035483, lat=44.654733904625445
DEBUG: Vertex 2: imageX=81, imageY=472, lon=8.312314655966388, lat=44.63972910979383
DEBUG: Vertex 3: imageX=374, imageY=548, lon=8.337613636862018, lat=44.63513086621639
DEBUG: Vertex 4: imageX=500, imageY=392, lon=8.348493062093587, lat=44.64456936619112
DEBUG: Vertex 5: imageX=484, imageY=155, lon=8.347111547778466, lat=44.65890862576811

我不清楚你到底有什么!你把一个东西叫做“PNG形状”,而我只知道“PNG”是一个图像,然后它是一个指向包含其他东西URL的标记文档的链接。然后你说你有一些坐标,但它显示为图片,但下面是JSON。所以我不知道我是否需要解析markdown、解释JSON或在PNG中找到特定颜色的区域来回答您的问题。@MarkSetchell,谢谢您的回复!你说得对,我还不够清楚。我编辑了问题并添加了新的细节。请让我知道,如果我可以添加任何其他内容,以使其更清楚。我已尝试将所有必要的部分包括在您的问题中,而无需参考其他网站。我还是不明白你想做什么。PNG中有6个角形,JSON中有4个点。不知怎的,你想要生成一个带有6个点的新JSON?那么为什么我需要包含4个点的JSON呢?我的意思是“PNG中的6个顶点和第一个JSON中的4个顶点之间的关系是什么?”@MarkSetchell我试图用图形解释来说明它:步骤1:我们有一个PNG图像和4个点。这让我们将PNG图像放置在地图上正确的位置,并适当地缩放它。步骤2:我们识别形状关键点的位置。步骤3:我们将一组已识别的点提取到多边形中。也许,我可以把这个解释直接添加到问题中,如果这能让描述更清楚的话是PNG文件中形状的最小封闭矩形吗?我现在已将结果的输出添加到JSON文件中。我尝试在较新的
cv2
上运行它,但其他一切都像魔术一样工作。非常感谢。
DEBUG: Nextent=44.66828662253787, Eextent=8.348579406738281, Sextent=44.63507036301143, Wextent=8.305320739746094
DEBUG: Trimmed image is "trimmed.png"
DEBUG: degppEW=8.634464469498503e-05, degppNS=6.0503204966194347e-05
DEBUG: Found shape with 6 vertices
DEBUG: Vertex 0: imageX=211, imageY=2, lon=8.323539459776736, lat=44.668165616127936
DEBUG: Vertex 1: imageX=2, imageY=224, lon=8.305493429035483, lat=44.654733904625445
DEBUG: Vertex 2: imageX=81, imageY=472, lon=8.312314655966388, lat=44.63972910979383
DEBUG: Vertex 3: imageX=374, imageY=548, lon=8.337613636862018, lat=44.63513086621639
DEBUG: Vertex 4: imageX=500, imageY=392, lon=8.348493062093587, lat=44.64456936619112
DEBUG: Vertex 5: imageX=484, imageY=155, lon=8.347111547778466, lat=44.65890862576811