分割数据集中.json格式标签转化成伪彩图图像

news2025/5/18 5:51:24

一、前言

图像分割任务中,分割数据集的转换和表示方式对于模型训练至关重要。目前主要有两种常见的分割结果表示方法:

1. 转化为TXT文件

这种方式通常使用一系列的点(坐标)来表示图像中每个像素的类别标签。每个点通常包含像素的坐标(x, y)和对应的类别标签。这种方式的优点是数据量较小,易于处理,适合于需要快速读取和处理大量数据的场景。

适用场景:

  • 适用于YOLO系列的分割模型,因为YOLO模型本身是为实时目标检测设计的,其分割版本(如YOLOv5的分割版本)也需要快速处理图像数据。

  • 由于YOLO模型的输入是固定大小的网格,因此使用点坐标表示分割结果可以方便地将这些点映射到网格上。

示例格式: 假设有一个类别标签为1、2、3的分割任务,TXT文件可能包含如下内容:

x1 y1 1
x2 y2 2
x3 y3 3
...

每行代表一个像素点,xy 是该点的坐标,最后的数字是类别标签。

2. 使用分割的伪彩图

这种方式是将分割结果直接以图像的形式保存,每个像素的颜色代表其类别。这种方法直观且易于理解,但数据量较大,因为需要保存整个图像文件。

适用场景:

  • 适用于一些专门的分割网络,如mmseg、U-Net、DeepLab和SAM等,这些模型通常需要更精细的分割结果,并且能够处理高分辨率的图像数据。

  • 伪彩图可以直接用于可视化分割结果,便于分析和调试。

示例格式: 伪彩图是一个普通的图像文件(如PNG或JPEG),其中每个像素的颜色对应一个类别。例如,类别1可能用红色表示,类别2用绿色表示,等等。

二、伪彩图转化

我们可以使用labelme中提供的一个命令行工具labelme_export_json直接进行转换,因此需要在安装了labelme 的虚拟环境中运行下面代码,其中A文件夹为转化后的保存路径,B文件夹为.json格式文件夹路径。

import os
import shutil
import subprocess

# 确保输出路径存在
output_dir = './image/mask' # 填写A文件夹的输出路径
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 获取 JSON 文件列表
json_list = os.listdir('./image/labels') # 填写B文件夹文件路径
print("JSON files found:", json_list)

# 遍历 JSON 文件列表
for idx, json_file in enumerate(json_list):
    # 构造输入和输出路径
    input_path = os.path.join('./image/labels', json_file) # 填写B文件夹文件路径
    output_path = os.path.join('./image/mask', json_file.replace('.json', '')) # 填写A文件夹的输出路径

    # 如果输出文件夹已存在,删除它
    if os.path.exists(output_path):
        shutil.rmtree(output_path)

    # 打印正在处理的文件和目标路径
    print(f"Processing {input_path} -> {output_path}")

    # 调用 labelme_export_json 命令并捕获输出
    command = f'labelme_export_json -o {output_path} {input_path}'
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    print(result.stdout)
    print(result.stderr)

    # 打印完成信息
    print('Done:', idx)

在A文件夹中,每张图片都会有一个文件夹,包含以下内容。

我们需要的主要是label.png文件,以下代码可以批量将A文件夹中每个图片文件夹中的label.png文件保存在一个C文件夹中。

import os
import shutil

def copy_label_png(source_folder, target_folder):
    # 确保目标文件夹存在
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)

    # 遍历源文件夹中的所有子文件夹
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            if file == "label.png":
                # 获取当前子文件夹的名称
                folder_name = os.path.basename(root)
                # 构造目标文件的完整路径,文件名以子文件夹的名字命名
                target_file_name = f"{folder_name}.png"
                target_file_path = os.path.join(target_folder, target_file_name)

                # 构造源文件的完整路径
                source_file_path = os.path.join(root, file)

                # 复制文件
                shutil.copy2(source_file_path, target_file_path)
                print(f"文件 {source_file_path} 已复制到 {target_file_path}")

# 设置源文件夹和目标文件夹路径
source_folder = "./image/mask"  # 替换为你的A文件夹路径
target_folder = "./image/mask/all/"  # 替换为你的C文件夹路径

copy_label_png(source_folder, target_folder)

运行后我们将在C文件夹中获取所有图片的伪彩图图像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录: 一、防火墙作用 二、防火墙分类 1、逻辑上划分:大体分为 主机防火墙 和 网络防火墙 2、物理上划分: 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…

# 构建和训练一个简单的CBOW词嵌入模型

构建和训练一个简单的CBOW词嵌入模型 在自然语言处理(NLP)领域,词嵌入是一种将词汇映射到连续向量空间的技术,这些向量能够捕捉词汇之间的语义关系。在这篇文章中,我们将构建和训练一个简单的Continuous Bag of Words…

Collection集合,List集合,set集合,Map集合

文章目录 集合框架认识集合集合体系结构Collection的功能常用功能三种遍历方式三种遍历方式的区别 List集合List的特点、特有功能ArrayList底层原理LinkedList底层原理LinkedList的应用场list:电影信息管理模块案例 Set集合set集合使用哈希值红黑树HashSet底层原理HashSet集合元…

使用DDR4控制器实现多通道数据读写(九)

一、本章概括 在上一节中,我们概括了工程的整体思路,并提供了工程框架,给出了读写DDR4寄存器的接口列表和重点时序图。当然,对于将DDR4内存封装成FIFO接口,其中的重点在于对于读写DDR4内存地址的控制,相对于…

深度解析n8n全自动AI视频生成与发布工作流

工作流模版地址:Fully Automated AI Video Generation & Multi-Platform Publishing | n8n workflow template 本文将全面剖析基于n8n平台的这个"全自动AI视频生成与多平台发布"工作流的技术架构、实现原理和关键节点,帮助开发者深入理解…

pycharm调试typescript

前言 搜索引擎搜索调试typescript,都是vscode,但是没看懂。 vscode界面简洁,但是适配起来用不习惯,还是喜欢用pycharm。 安装软件 安装Node.js https://nodejs.org/zh-cn 判断是否安装成功 node -v npm install -g typescrip…

spring-ai之Advisors API

1、 Spring AI Advisors API 提供了一种灵活而强大的方法来拦截、 修改和增强 Spring 应用程序中的 AI 驱动的交互。 通过利用 Advisors API,开发人员可以创建更复杂、可重用和可维护的 AI 组件。主要优势包括封装重复的生成式 AI 模式、转换发送到大型语言模型 &…

JVM 系列:JVM 内存结构深度解析

你点赞了吗?你关注了吗?每天分享干货好文。 高并发解决方案与架构设计。 海量数据存储和性能优化。 通用框架/组件设计与封装。 如何设计合适的技术架构? 如何成功转型架构设计与技术管理? 在竞争激烈的大环境下&#xff0c…

【回眸】Tessy集成测试软件使用指南(一)新手使用篇

前言 这个专栏的文章前4篇都在记录如何使用Tessy进行单元测试,集成测试需要有一定单元测试基础,且做集成测试之前,需要做好单元测试,否则将会大幅增加软件单元代码纠错的代价。集成测试所花费的时间通常远远超过单元测试。如果直…

ROS 快速入门教程02

5. Node 节点 以智能手机为例,当我们使用智能手机的某个功能时,大多时候在使用手机的某个APP。同样当我们使用ROS的某个功能时,使用的是ROS的某一个或者某一些节点。 虽然每次我们只使用ROS的某一个或者某一些节点,但我们无法下…

vue+django+LSTM微博舆情分析系统 | 深度学习 | 食品安全分析

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: D031 LSTM 架构:vuedjangoLSTMMySQL 功能: 微博信息爬取、情感分析、基于负面消极内容舆情分析…

HCIP实验二(OSPF网络配置与优化)

一.拓扑图与题目 1.R5为ISP,其上只能配置IP地址; R5与其他所有直连设备间均使用公有IP;环回地址为100.1.1.1/3 2.R4设备为企业出口路由器 3.整个0SPF环境IP基于172.16.0.0/16划分 4.所有设备均可访问R5的环回; 5.减少LSA的更新里,加快收敛&#xff0…

K8S的service详解

一。service的介绍 在K8S中,pod是访问应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也意味着不方便直接采用pod的ip对服务进行访问,为了解决这个问题,K8S提供了service…

数据结构初阶:二叉树(四)

概述:本篇博客主要介绍链式结构二叉树的实现。 目录 1.实现链式结构二叉树 1.1 二叉树的头文件(tree.h) 1.2 创建二叉树 1.3 前中后序遍历 1.3.1 遍历规则 1.3.1.1 前序遍历代码实现 1.3.1.2 中序遍历代码实现 1.3.1.3 后序遍历代…

配置Intel Realsense D405驱动与ROS包

配置sdk使用 Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS包_realsense的驱动包-CSDN博客 中的方法一 之后不通过apt安装包,使用官方的安装步骤直接clone https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy 从这一步开始 执行完 这一步…

【最新版】沃德代驾源码全开源+前端uniapp

一.系统介绍 基于ThinkPHPUniapp开发的代驾软件。系统源码全开源,代驾软件的主要功能包括预约代驾、在线抢单、一键定位、在线支付、车主登记和代驾司机实名登记等‌。用户可以通过小程序预约代驾服务,系统会估算代驾价格并推送附近代驾司机供用户选择&…

Linux:权限相关问题

文章目录 shell命令以及运行的原理Linux权限执行权限更改目录权限缺省权限粘滞位 shell命令以及运行的原理 操作系统分为内核和外壳程序,xshell是外壳程序,外壳程序包括我们windows桌面上的图形化界面,本质都是翻译给核心处理,再显…

AI数字人:元宇宙舞台上的闪耀新星(7/10)

摘要:AI数字人作为元宇宙核心角色,提升交互体验,推动内容生产变革,助力产业数字化转型。其应用场景涵盖虚拟社交、智能客服、教育、商业营销等,面临技术瓶颈与行业规范缺失等挑战,未来有望突破技术限制&…

【Linux】冯诺依曼体系结构及操作系统架构图的具体剖析

目录 一、冯诺依曼体系结构 1、结构图 2、结构图介绍: 3、冯诺依曼体系的数据流动介绍 4、为什么在该体系结构中要存在内存? 二、操作系统架构图介绍 1、操作系统架构图 2、解析操作系统架构图 3、为什么要有操作系统? 前些天发现了一…

算法训练营第一天|704.二分查找、27.移除元素、977.有序数组的平方

数组理论基础 1.数组是存放在连续内存空间上的相同类型数据的集合。 2.数组的元素是不能删除的,只能覆盖。 3.不同语言不一样,在C中,二维数组是连续分布的 704.二分查找 题目 思路与解法 第一想法: 简单的二分查找&#xff0c…