当前位置: 首页 > article >正文

LabelImg标注的YOLO格式txt坐标转换保姆级教程(附Python代码)

LabelImg标注的YOLO格式坐标转换实战指南从原理到Python实现在计算机视觉项目中数据标注是模型训练前的关键步骤。LabelImg作为一款开源的图像标注工具支持生成YOLO格式的标注文件。然而许多开发者在实际应用中发现YOLO格式的归一化坐标并不能直接用于可视化或其他处理流程。本文将深入解析YOLO坐标转换的核心原理并提供可直接集成到项目中的Python代码实现。1. 为什么需要YOLO坐标转换YOLO格式的标注文件采用归一化坐标表示这种设计有其独特的优势设备无关性归一化坐标不依赖原始图像尺寸同一套标注可以适应不同分辨率的图像训练友好神经网络处理0-1范围内的数值通常更稳定存储高效浮点数表示比绝对坐标占用更少空间但在以下场景中我们需要将其转换为绝对坐标可视化验证在原始图像上绘制边界框进行标注质量检查多工具协作与其他使用绝对坐标的计算机视觉库(如OpenCV)集成数据增强进行裁剪、旋转等变换时需要基于像素坐标操作模型评估计算IoU等指标时通常需要绝对坐标注意转换过程中必须获取原始图像尺寸否则无法正确还原坐标比例2. YOLO坐标格式深度解析YOLO格式的TXT文件中每行表示一个标注对象格式为class x_center y_center width height其中各参数含义如下参数范围描述class整数物体类别索引x_center[0,1]边界框中心点的x坐标(相对于图像宽度)y_center[0,1]边界框中心点的y坐标(相对于图像高度)width[0,1]边界框宽度(相对于图像宽度)height[0,1]边界框高度(相对于图像高度)转换绝对坐标的关键公式x_min (x_center - width/2) * image_width x_max (x_center width/2) * image_width y_min (y_center - height/2) * image_height y_max (y_center height/2) * image_height3. Python实现完整坐标转换方案下面提供一个健壮的Python实现包含错误处理和批量处理功能import cv2 import os def yolo_to_abs(img_path, txt_path): 将YOLO格式坐标转换为绝对坐标 参数: img_path: 图像文件路径 txt_path: 标注文件路径 返回: list: 转换后的坐标列表 [(class, xmin, ymin, xmax, ymax), ...] try: # 读取图像获取尺寸 img cv2.imread(img_path) if img is None: raise ValueError(f无法读取图像: {img_path}) h, w img.shape[:2] # 读取标注文件 with open(txt_path, r) as f: lines f.readlines() results [] for line in lines: parts line.strip().split() if len(parts) ! 5: continue class_id, x_center, y_center, width, height parts # 转换为浮点数 try: x_center, y_center float(x_center), float(y_center) width, height float(width), float(height) except ValueError: continue # 坐标转换 x_min (x_center - width/2) * w x_max (x_center width/2) * w y_min (y_center - height/2) * h y_max (y_center height/2) * h results.append((int(class_id), x_min, y_min, x_max, y_max)) return results except Exception as e: print(f转换出错: {e}) return None配套的可视化函数def visualize_boxes(img_path, boxes, color(0, 255, 0), thickness2): 在图像上绘制边界框 参数: img_path: 图像路径 boxes: 边界框列表 [(class, xmin, ymin, xmax, ymax), ...] color: 框颜色 (B,G,R) thickness: 线宽 img cv2.imread(img_path) for box in boxes: class_id, xmin, ymin, xmax, ymax box cv2.rectangle(img, (int(xmin), int(ymin)), (int(xmax), int(ymax)), color, thickness) cv2.imshow(Annotation Preview, img) cv2.waitKey(0) cv2.destroyAllWindows()4. 实战技巧与常见问题排查4.1 批量处理整个数据集def batch_convert_yolo_to_abs(image_dir, label_dir, output_dir): 批量转换YOLO标注为绝对坐标并保存 参数: image_dir: 图像目录 label_dir: 标注文件目录 output_dir: 输出目录 os.makedirs(output_dir, exist_okTrue) for filename in os.listdir(label_dir): if not filename.endswith(.txt): continue # 构建对应图像路径 img_name os.path.splitext(filename)[0] .jpg img_path os.path.join(image_dir, img_name) txt_path os.path.join(label_dir, filename) # 转换坐标 boxes yolo_to_abs(img_path, txt_path) if not boxes: continue # 保存结果 output_path os.path.join(output_dir, filename) with open(output_path, w) as f: for box in boxes: line .join(map(str, box)) \n f.write(line)4.2 常见问题及解决方案坐标超出图像边界现象转换后的x_max 图像宽度或y_max 图像高度原因标注时边界框超出了图像范围解决使用np.clip限制坐标范围图像尺寸不匹配现象转换后的坐标明显错误原因标注后图像被resize但标注未更新解决确保使用与标注时相同尺寸的图像标注文件格式错误现象读取标注时报错原因文件可能包含空行或格式不规范解决添加格式校验逻辑增强版的坐标转换函数增加边界检查和错误处理import numpy as np def safe_yolo_to_abs(img_path, txt_path): 带边界检查和错误处理的坐标转换 参数: img_path: 图像路径 txt_path: 标注路径 返回: list: 安全转换后的坐标列表 try: img cv2.imread(img_path) if img is None: print(f警告: 无法读取图像 {img_path}) return [] h, w img.shape[:2] boxes [] with open(txt_path, r) as f: for line in f: line line.strip() if not line: continue parts line.split() if len(parts) ! 5: print(f警告: 跳过格式错误的行: {line}) continue try: class_id int(parts[0]) x_center, y_center float(parts[1]), float(parts[2]) width, height float(parts[3]), float(parts[4]) except ValueError: print(f警告: 跳过包含非数值的行: {line}) continue # 计算并限制坐标范围 x_min max(0, (x_center - width/2) * w) x_max min(w, (x_center width/2) * w) y_min max(0, (y_center - height/2) * h) y_max min(h, (y_center height/2) * h) boxes.append((class_id, x_min, y_min, x_max, y_max)) return boxes except Exception as e: print(f处理 {txt_path} 时出错: {str(e)}) return []5. 高级应用与其他格式互转在实际项目中我们经常需要在不同标注格式间转换。以下是YOLO格式与COCO格式的互转方法5.1 YOLO转COCO格式def yolo_to_coco(img_path, txt_path, image_id, annotation_id): 将YOLO标注转换为COCO格式的标注 参数: img_path: 图像路径 txt_path: YOLO标注路径 image_id: COCO格式中的图像ID annotation_id: 起始标注ID 返回: dict: COCO格式的image信息 list: COCO格式的annotations列表 img cv2.imread(img_path) h, w img.shape[:2] # COCO image信息 image_info { id: image_id, file_name: os.path.basename(img_path), width: w, height: h } annotations [] boxes yolo_to_abs(img_path, txt_path) for box in boxes: class_id, xmin, ymin, xmax, ymax box width xmax - xmin height ymax - ymin annotation { id: annotation_id, image_id: image_id, category_id: class_id, bbox: [xmin, ymin, width, height], area: width * height, iscrowd: 0 } annotations.append(annotation) annotation_id 1 return image_info, annotations5.2 COCO转YOLO格式def coco_to_yolo(coco_annotation, img_width, img_height): 将COCO格式标注转换为YOLO格式 参数: coco_annotation: COCO格式的单个标注 img_width: 图像宽度 img_height: 图像高度 返回: str: YOLO格式的标注行 x, y, width, height coco_annotation[bbox] x_center (x width/2) / img_width y_center (y height/2) / img_height norm_width width / img_width norm_height height / img_height return f{coco_annotation[category_id]} {x_center} {y_center} {norm_width} {norm_height}6. 性能优化与工程实践对于大规模数据集坐标转换可能成为性能瓶颈。以下是几种优化方案并行处理使用多进程加速批量转换from multiprocessing import Pool def parallel_convert(args): img_path, txt_path, output_path args boxes yolo_to_abs(img_path, txt_path) if boxes: with open(output_path, w) as f: for box in boxes: f.write( .join(map(str, box)) \n) # 使用示例 if __name__ __main__: args_list [...] # 构建参数列表 with Pool(processes4) as pool: pool.map(parallel_convert, args_list)缓存图像尺寸避免重复读取图像文件import json def get_image_size_cache(image_dir): 预构建图像尺寸缓存 size_cache {} for img_name in os.listdir(image_dir): img_path os.path.join(image_dir, img_name) img cv2.imread(img_path) if img is not None: size_cache[img_name] img.shape[:2] return size_cache # 使用缓存优化转换函数 def yolo_to_abs_cached(txt_path, size_cache): img_name os.path.splitext(os.path.basename(txt_path))[0] .jpg if img_name not in size_cache: return [] w, h size_cache[img_name] # 其余转换逻辑相同...增量处理只处理新增或修改的标注文件在工程实践中建议将坐标转换封装为可复用的Python模块并通过单元测试确保转换准确性import unittest class TestYoloConversion(unittest.TestCase): def test_conversion(self): # 测试已知的转换案例 test_img_size (640, 480) # (width, height) test_cases [ # (yolo_coords, expected_abs_coords) ((0 0.5 0.5 0.2 0.2), (0, 256, 192, 384, 288)), ((1 0.25 0.75 0.5 0.5), (1, 0, 240, 320, 480)) ] for yolo_str, expected in test_cases: with self.subTest(yolo_stryolo_str): # 模拟从文件读取 with open(test.txt, w) as f: f.write(yolo_str) # 模拟图像尺寸 class MockImage: shape (test_img_size[1], test_img_size[0], 3) # 测试转换 result yolo_to_abs(test.txt, MockImage) self.assertEqual(len(result), 1) self.assertEqual(result[0], expected) if __name__ __main__: unittest.main()

相关文章:

LabelImg标注的YOLO格式txt坐标转换保姆级教程(附Python代码)

LabelImg标注的YOLO格式坐标转换实战指南:从原理到Python实现 在计算机视觉项目中,数据标注是模型训练前的关键步骤。LabelImg作为一款开源的图像标注工具,支持生成YOLO格式的标注文件。然而,许多开发者在实际应用中发现&#xff…...

用操作系统类比彻底搞懂 AI Agent:进程、系统调用与上下文窗口

用操作系统类比彻底搞懂 AI Agent:进程、系统调用与上下文窗口 引言 很多人第一次接触 AI Agent,会立刻被一堆新词包围:Tool Use、Function Calling、RAG、Memory、Orchestrator、Multi-Agent、Context Compression。 这些词看起来很新&#…...

科技与科学新闻摘要-2026年5月16日

科技与科学新闻摘要 日期: 2026年5月16日 科技领域重点新闻 1. 中国2025年度十大科学进展揭晓 核心要点: 中国科学技术部发布了2025年度十大科学进展,覆盖深空探测、人工智能、生命科学、能源技术等多个领域,集中展示了中国基础研究和应用研究的突破性…...

每日大赛间歇期通过Taotoken模型广场探索新模型特性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 每日大赛间歇期通过Taotoken模型广场探索新模型特性 对于每日参与各类AI应用开发或创意大赛的选手而言,比赛间歇期并非…...

当机器人遇见城市:江南北如何重塑武汉的智能生活图景

城市,是人类文明的结晶,也是科技创新的试验场。在武汉这座英雄的城市,一场由江南北(武汉)信息技术有限公司(简称“江南北机器人”)引领的智能革命,正悄然改变着市民的日常生活与城市…...

5步搭建Sunshine游戏串流服务器:打造你的私人云游戏平台

5步搭建Sunshine游戏串流服务器:打造你的私人云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的自托管游戏串流服务器,专…...

GitHub系统提示词库:提升大模型交互效率的工程实践指南

1. 项目概述:一个系统提示词的宝库如果你深度使用过ChatGPT、Claude或者DeepSeek这类大语言模型,那你一定对“系统提示词”这个概念不陌生。简单来说,它就是你发给模型的“第一条指令”,用来设定它的身份、行为准则和对话风格。比…...

82、【Agent】【OpenCode】bash 工具提示词(amend 风险)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】bash 工…...

免费开源工业通信调试工具:ModbusTool终极指南,5分钟快速上手

免费开源工业通信调试工具:ModbusTool终极指南,5分钟快速上手 【免费下载链接】ModbusTool A modbus master and slave test tool with import and export functionality, supports TCP, UDP and RTU. 项目地址: https://gitcode.com/gh_mirrors/mo/Mo…...

LibreOffice Online 终极指南:如何在浏览器中实现免费办公协作

LibreOffice Online 终极指南:如何在浏览器中实现免费办公协作 【免费下载链接】online Read-only Mirror - no pull request (use https://gerrit.libreoffice.org instead) 项目地址: https://gitcode.com/gh_mirrors/onl/online 还在为昂贵的在线办公软件…...

如何快速掌握Winhance中文版:Windows优化终极指南

如何快速掌握Winhance中文版:Windows优化终极指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...

Virtual ZPL Printer:5步搭建专业级条码标签开发测试环境

Virtual ZPL Printer:5步搭建专业级条码标签开发测试环境 【免费下载链接】Virtual-ZPL-Printer An ethernet based virtual Zebra Label Printer that can be used to test applications that produce bar code labels. 项目地址: https://gitcode.com/gh_mirror…...

Heightmapper完全指南:5步将全球地形数据变成3D模型

Heightmapper完全指南:5步将全球地形数据变成3D模型 【免费下载链接】heightmapper interactive heightmaps from terrain data 项目地址: https://gitcode.com/gh_mirrors/he/heightmapper 还在为3D地形建模发愁吗?Heightmapper让你的地形创作效…...

终极解决方案:让苹果触控板在Windows上获得原生级精准触控体验

终极解决方案:让苹果触控板在Windows上获得原生级精准触控体验 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-tou…...

别再手动记版本了!Xilinx FPGA两种自动记录编译时间的方法实测对比(附Tcl脚本)

Xilinx FPGA版本管理实战:Tcl脚本与USR_ACCESS原语深度评测 每次编译FPGA设计时手动记录版本号的时代该结束了。在快速迭代的硬件开发中,精确追踪每个比特流文件的生成时间对调试和版本控制至关重要。本文将深入对比两种自动化方案——Tcl脚本与USR_ACCE…...

异步复位同步释放:数字电路设计的核心技巧与工程实践

1. 项目概述:一个看似简单却暗藏玄机的设计技巧在数字电路设计,尤其是FPGA和ASIC开发中,复位信号的处理是确保系统从确定状态启动和稳定运行的第一道,也是最重要的一道防线。我们经常听到“异步复位,同步释放”这个设计…...

2026 免费GEO监测:AI搜索优化实用工具推荐

2026年AI搜索优化(GEO)已经成为企业数字营销的核心环节。当前GEO工具市场呈现明显的国内外分化格局,国内工具和海外工具在功能支持、适用场景上存在巨大差异。本文选取目前市场上主流的5款GEO工具,从功能完整性、AI模型支持、易用…...

3分钟完成B站缓存视频转换:m4s-converter完整使用指南

3分钟完成B站缓存视频转换:m4s-converter完整使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站视频下架后&…...

Linux服务器安全基线自动化实践:基于Ansible的加固方案

1. 项目概述与核心价值“安全加固”这个词,对于任何一个负责线上系统运维、应用部署或者个人服务器管理的朋友来说,都绝不陌生。它就像给自家房子装防盗门、安监控一样,是基础且必要的工作。然而,现实情况往往是:我们面…...

税调企业与所在区县税务局的距离

税调企业与所在区县税务局的距离2007-2020数据包含:2007~2020年税调企业与所在区县税务局的距离_km.dta数据包含如下变量:sdid、与税务局的大圆距离_km、税务局经度、经度、纬度、省、省代码、市、市代码、县、县代码、税务局纬度、组织机构代…...

【ElevenLabs语音伦理合规白皮书】:面向银发群体的AI语音生成必须绕开的4类GDPR/《互联网信息服务深度合成管理规定》雷区

更多请点击: https://intelliparadigm.com 第一章:银发群体AI语音服务的伦理合规必要性 随着智能语音助手在居家养老、远程问诊、紧急呼叫等场景中的深度部署,面向60岁以上用户的AI语音服务已从“可选功能”演变为“关键基础设施”。然而&am…...

RK3568平台开发系列讲解(热拔插篇)内核是如何发送事件到用户空间

🚀返回专栏总目录 文章目录 一、相关接口函数 二、udevadm 命令 三、实验程序 四、运行效果 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、相关接口函数 kobject_uevent 是 Linux 内核中的一个函数, 用于生成和发送 uevent 事件。 它是 udev 和其他设备管理工具与…...

实验室小白避坑指南:在浪潮AiStation上从零部署PyTorch项目(含离线环境打包)

实验室科研实战:浪潮AiStation离线部署PyTorch全流程解析 当实验室服务器遭遇网络隔离与资源限制时,如何高效部署深度学习项目成为每个科研新手的必修课。本文将针对浪潮AiStation平台的特殊性,系统梳理从环境准备到代码运行的完整闭环&#…...

终极NGA论坛浏览体验优化指南:5分钟打造你的专属摸鱼神器

终极NGA论坛浏览体验优化指南:5分钟打造你的专属摸鱼神器 【免费下载链接】NGA-BBS-Script NGA论坛增强脚本,给你完全不一样的浏览体验 项目地址: https://gitcode.com/gh_mirrors/ng/NGA-BBS-Script 还在为NGA论坛繁杂的界面和低效的浏览体验烦恼…...

Cursor Free VIP:一键解决Cursor AI试用限制的智能工具

Cursor Free VIP:一键解决Cursor AI试用限制的智能工具 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…...

上海软件定制开发技术路径深度拆解:PaaS云架构如何重构企业系统交付模式

摘要:本文围绕上海软件定制开发的核心技术路径展开分析,重点拆解PaaS云架构在企业软件交付中的实现机制、架构取舍与落地约束,并结合典型平台的工程实践,探讨不同开发模式在性能、兼容性与运维成本上的真实差异。企业在推进数字化…...

Sunshine游戏串流服务器:打造你的私人云游戏平台

Sunshine游戏串流服务器:打造你的私人云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在客厅电视、笔记本电脑甚至手机上玩高性能PC游戏吗?S…...

【模拟 IC】运放失调电压的成因剖析与版图优化策略

1. 运放失调电压的本质与影响 第一次接触运放失调电压这个概念时,我也被它搞得一头雾水。简单来说,失调电压就是理想运放和实际运放之间的"性格差异"。理想情况下,当两个输入端电压相等时,输出应该是零。但现实中&#…...

用MakeCode Arcade与树莓派Zero打造复古像素游戏:从拖拽编程到实体街机

1. 项目概述:为什么选择MakeCode Arcade开启你的游戏开发之旅?如果你对编程充满好奇,又或者一直想亲手制作一款属于自己的复古像素风游戏,但被一行行复杂的代码劝退,那么MakeCode Arcade就是你一直在寻找的答案。它不是…...

告别环境配置焦虑:用Intel oneAPI和OpenMPI在CentOS7搭建你的第一个并行计算Demo

告别环境配置焦虑:用Intel oneAPI和OpenMPI在CentOS7搭建你的第一个并行计算Demo 高性能计算(HPC)的世界常常让人望而生畏——复杂的工具链、晦涩的术语、漫长的环境配置过程。但今天,我们将打破这一认知。只需一台CentOS7服务器…...