数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)

2024-06-20 00:04

本文主要是介绍数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》


在这里插入图片描述

目录

  • 一、YOLO格式
  • 二、实现步骤
  • 三、代码
    • 3.1 参数修改
    • 3.2 代码
  • 四、转换结果
  • 五、总结

一、YOLO格式

YOLO格式的数据集通常包含两部分:图像文件和对应的文本标注文件。每个文本标注文件中包含了图像中每个物体的类别和位置信息。每一行代表一个物体,格式如下:

<class_id> <x_center> <y_center> <width> <height>

其中,<class_id>是物体类别的ID,<x_center>和<y_center>是物体中心点的坐标,和是物体的宽度和高度。所有的坐标和尺寸都需要被归一化,即除以图像的宽度和高度,因此它们的值都在0到1之间。

二、实现步骤

要将.png格式的标签图转换为YOLO格式的.txt文件,需要以下步骤:

(1)读取.png标签图,每个物体应该被标记为不同的颜色;

(2)解析标签图,对每种颜色进行遍历,找出所有像素点的坐标;

(3)对每种颜色的像素点坐标进行分析,计算出对应的bounding box(通过找到最小和最大的x,y坐标来实现);

(4)将bounding box的坐标和尺寸归一化,然后保存为.txt文件。

三、代码

3.1 参数修改

在这里插入图片描述

3.2 代码

注:.png格式个标签图像,必须是单通道图像。

import os
import cv2
import numpy as npdef convert_segmentation_to_yolo(img_path, output_path, num_classes):# 读取标签图img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)height, width = img.shape# 创建用于存储YOLO格式的列表yolo_labels = []# 遍历每个类别for class_id in range(num_classes):# 找到当前类别的所有像素位置class_pixels = np.where(img == class_id)# 如果当前类别不存在,跳过if len(class_pixels[0]) == 0:continue# 找到类别的最小和最大边界x_min = np.min(class_pixels[1])x_max = np.max(class_pixels[1])y_min = np.min(class_pixels[0])y_max = np.max(class_pixels[0])# 计算中心点和宽高,并归一化x_center = (x_min + x_max) / 2 / widthy_center = (y_min + y_max) / 2 / heightbbox_width = (x_max - x_min) / widthbbox_height = (y_max - y_min) / height# 保存YOLO格式的标签yolo_labels.append(f"{class_id} {x_center} {y_center} {bbox_width} {bbox_height}")# 将YOLO标签写入.txt文件txt_file = os.path.splitext(os.path.basename(img_path))[0] + ".txt"with open(os.path.join(output_path, txt_file), "w") as f:for label in yolo_labels:f.write(label + "\n")# 示例调用
# img_folder = 'path/to/your/png/folder'
# output_folder = 'path/to/your/txt/folder'
img_folder = 'Images/Segment_Images/image_png'
output_folder = 'Images/Segment_Images/label_txt'
# num_classes = 21  # 假设有21个类别
num_classes = 2  # 假设有21个类别if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍历标签图文件夹并转换
for img_file in os.listdir(img_folder):if img_file.endswith('.png'):img_path = os.path.join(img_folder, img_file)convert_segmentation_to_yolo(img_path, output_folder, num_classes)

四、转换结果

下面是原始的png格式标签图和转换后的yolo格式.txt文件。

在这里插入图片描述

五、总结

以上就是语义分割前png、jpg格式标签图转yolo格式.txt文件的详细过程,希望能帮到你!

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

这篇关于数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076529

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

麻了!一觉醒来,代码全挂了。。

作为⼀名程序员,相信大家平时都有代码托管的需求。 相信有不少同学或者团队都习惯把自己的代码托管到GitHub平台上。 但是GitHub大家知道,经常在访问速度这方面并不是很快,有时候因为网络问题甚至根本连网站都打不开了,所以导致使用体验并不友好。 经常一觉醒来,居然发现我竟然看不到我自己上传的代码了。。 那在国内,除了GitHub,另外还有一个比较常用的Gitee平台也可以用于

YOLO v3 训练速度慢的问题

一天一夜出了两个模型,仅仅迭代了200次   原因:编译之前没有将Makefile 文件里的GPU设置为1,编译的是CPU版本,必须训练慢   解决方案: make clean  vim Makefile make   再次训练 速度快了,5分钟迭代了500次