XYWH标注格式与YOLO标注格式之间的相互转化

1. YOLO数据格式介绍

YOLO标签的数据是一个相对值,而不是绝对值。

YOLO标签数据为原始图像对应的txt文件,每一张图像对应一个txt,其中包含了多条标签信息。

数据格式表示为:

1:[目标类别]

2:[目标中心点横坐标与图像宽度比值]

3:[目标中心点纵坐标与图像高度比值]

4:[目标框与图像宽度比值]

5:[目标框与图像高度比值] 

2. 代码

将bbox的绝对值转化为YOLO数据格式,此处以xywh为例:

import cv2

def xywh_to_yolo(img_path, x, y, w, h):
    # img_path: 原始图像路径
    img = cv2.imread(img_path)
    img_w, img_h = img.shape[1], img.shape[0]
    dw = 1./img_w
    dh = 1./img_h
    cx = (x + (x+w))/2.0
    cy = (y + (y+h))/2.0
    x = cx*dw
    y = cy*dh
    w = w*dw
    h = h*dh
    return (x, y, w, h)

YOLO标注格式转化为XYWH标注格式

def yolo_to_xywh(img, x, y, w, h):

    img_w, img_h = img.shape[1], img.shape[0]
    x_t = x*img_w
    y_t = y*img_h
    w_t = w*img_w
    h_t = h*img_h

    top_left_x = int(x_t - w_t / 2)
    top_left_y = int(y_t - h_t / 2)
    bottom_right_x = int(x_t + w_t / 2)
    bottom_right_y = int(y_t + h_t / 2)
    ww = bottom_right_x-top_left_x
    hh = bottom_right_y-top_left_y
    return (top_left_x, top_left_y, ww, hh)

### 创建和标注适用于YOLOv8的数据集 #### 安装LabelImg用于数据集标注 对于Windows环境下安装LabelImg,建议创建并激活专门的虚拟环境来管理依赖项。这有助于避免不同项目之间的库冲突问题[^1]。 ```bash # 创建Python虚拟环境名为yolov8_env python -m venv yolov8_env # 激活该虚拟环境 .\yolov8_env\Scripts\activate.bat ``` 接着,在已激活的环境中执行如下命令以完成LabelImg的安装: ```bash pip install labelimg ``` 成功安装后,可以通过`labelimg`指令启动图形界面程序来进行图像的手动标注工作。此工具允许用户绘制边界框以及分配类别标签给每张图片中的目标对象。 #### 自动化标注过程概述 除了手动方式外,还存在一种基于已有模型实现自动化初步标注的方法。具体而言,可以利用预训练好的YOLOv8权重文件对新采集的照片实施快速检测,并将得到的结果导出为符合YOLO格式要求的文字描述文档(`.txt`),其中包含了各物体位置信息及其对应的临时名称而非编号形式表示的类目ID[^3]。 为了确保这些自动生成的信息准确无误,通常还需要借助辅助脚本来进一步处理——比如转换成连续整数类型的分类索引值;同时提供了一个可视化验证环节以便人工复查可能存在的错误或遗漏情况。 ```python import os from ultralytics import YOLO def auto_label(image_folder, output_path): model = YOLO('yolov8n.pt') # 加载轻量级版本的YOLOv8网络结构 images = [os.path.join(image_folder, f) for f in os.listdir(image_folder)] results = model(images) for i, r in enumerate(results): boxes = r.boxes.cpu().numpy() with open(os.path.join(output_path, f"{i}.txt"), 'w') as file: for box in boxes: cls_name = str(int(box.cls)) # 假设这里直接取整作为类别名 line = " ".join(map(str, [ cls_name, *box.xywh.tolist()[0], box.conf.item()])) file.write(f"{line}\n") if __name__ == "__main__": image_dir = "./images" save_to = "./labels" if not os.path.exists(save_to): os.makedirs(save_to) auto_label(image_dir, save_to) ``` 上述代码片段展示了如何调用YOLOv8框架下的API接口批量处理一批输入图像,并按照指定模式记录下识别出来的各个实例的位置参数至相应的文本文件内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值