语义分割——json文件转shp

embedded/2024/11/14 3:16:11/

前言

        在用labelme标注遥感图像后会生成json文件,如果我们想要shp文件,下面给出了具体实现流程。

一、依赖配置

import json
import geopandas as gpd
from shapely.geometry import Polygon
from osgeo import gdal
import argparse
import glob
import os
import shutil

        配置环境中直接用以下命令进行安装。

python">pip install 包名

        如果pip找不到包,就用conda,这里geopandas就是用conda安装。

python">conda install  包名

二、json_to_shp代码实现

python">import json
import geopandas as gpd
from shapely.geometry import Polygon
from osgeo import gdal
import argparse
import glob
import os
import shutildef labelme_json_to_shapefile(labelme_json_path, output_folder):with open(labelme_json_path, 'r') as f:data = json.load(f)# 读取跟json文件相关的影像信息image_width = data['imageWidth']image_height = data['imageHeight']geometries = []imagepath = os.path.join(os.path.dirname(labelme_json_path), os.path.basename(data['imagePath']))print(imagepath)image = gdal.Open(imagepath)geotrans = image.GetGeoTransform()x0 = geotrans[0]y0 = geotrans[3]x_resolution = geotrans[1]y_resolution = geotrans[5]# 创建新的文件夹以图片名称命名image_folder = os.path.join(output_folder, os.path.splitext(os.path.basename(imagepath))[0])os.makedirs(image_folder, exist_ok=True)shutil.copy(imagepath, image_folder)# 处理每个标注对象for shape in data['shapes']:label = shape['label']points = shape['points']# 将相对坐标转换为绝对坐标polygon_coords = [(x0 + point[0] * x_resolution, y0 + point[1] * y_resolution) for point in points]# 创建 shapely Polygon 对象polygon = Polygon(polygon_coords)# 添加到 geometries 列表中geometries.append({'label': label, 'geometry': polygon})# 创建 GeoDataFramegdf = gpd.GeoDataFrame(geometries, geometry='geometry')gdf.crs = 'EPSG:4326'# 构造输出 Shapefile 文件路径output_shapefile_path = os.path.join(image_folder, os.path.splitext(os.path.basename(labelme_json_path))[0] + '.shp')gdf.to_file(output_shapefile_path, driver='ESRI Shapefile')def main():input_folder = r'D:\wheat\工具包\json_shp\json5\json'output_folder = r'D:\wheat\工具包\json_shp\json5\shp'json_files = glob.glob(os.path.join(input_folder, '*.json'))for json_file in json_files:labelme_json_to_shapefile(json_file, output_folder)if __name__ == '__main__':main()

         注意json文件和tif文件要放在同一个文件夹下面。

        如:

生成的文件如下:


http://www.ppmy.cn/embedded/16046.html

相关文章

“亚马逊依赖”之下,傲基科技的品牌势能如何提升?

受益于出口政策红利、低人工成本、完善的供应链以及成熟的生产工艺优势,近年来我国家具出口行业迅速发展。 数据显示,我国家具出口规模1995年仅为11.06亿美元,至2023年增至641.96亿美元。随着出口规模持续扩大,相关企业积极走入公…

Golang编译优化——公共子表达式消除

文章目录 一、概述二、公共子表达式消除2.1 初始划分等价值2.2 细分等价值2.2.1 给所有值标号2.2.2 根据参数细分等价值 2.3 替换重复表达式2.3 .1 按照支配性排序2.3 .2 进行替换操作 一、概述 公共子表达式消除(Common Subexpression Elimination,CSE…

Linux的DNS域名解析服务

目录 1.DNS 1.1定义 1.2作用/功能 1.3域名结构 1.4两种查询方式 1.5DNS域名解析工作原理 1.6DNS系统类型 2.正向解析实验​ 2.1安装bind服务,查看配置文件 2.2配置文件配置及文件内容说明 3.反向解析实验 4.配置主从DNS服务器 1.DNS 1.1定义 DNS域名系…

嵌入式4-24

作业: 整理思维导图 定义一个矩形类Rec,包含私有属性length,width,有以下成员函数: void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…

《统计学习方法》 第4章 朴素贝叶斯法

文章目录 前言一、朴素贝叶斯法二、朴素贝叶斯法的学习和分类三、朴素贝叶斯算法四、贝叶斯估计总结 前言 本文只要记录一些书中的一些小知识点,挑一些本人认为重要的地方进行总结。 各位道友!道长(zhǎng) 道长(chǎng) 一、朴素贝叶斯法 朴素贝叶斯…

Leaflet加载geowebcache的WMTS服务

方法1&#xff1a;leaflet.TileLayer.WMTS插件 插件地址https://github.com/alexandre-melard/leaflet.TileLayer.WMTS 用法示例https://hanbo.blog.csdn.net/article/details/80768710 我的示例代码 <!DOCTYPE html> <html lang"zh"> <head><…

vue3-setup与vue2的data共存

文章目录 前言一、vue3的setup响应式状态生命周期钩子示例注意事项 二、与vue2 的data 共存setup 与 data 的区别setup 与 data 的共存注意事项示例 前言 vue3 setup 学习 一、vue3的setup Vue 3 的 setup 函数是 Composition API 的核心&#xff0c;它提供了一种新的方式来使…

队列的实现(c语言实现)

队列的定义 队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着最早被添加到队列中的元素将是最先被移除的元素。队列的主要操作包括入队&#xff08;enqueue…