YOLO数据格式说明与转换

文章目录[隐藏]

1. YOLO数据格式说明

  • yolo标注格式保存在.txt文件中,一共5个数据,用空格隔开,举例说明如下图所示:
    在这里插入图片描述

假设图像的高和宽分别为h, w,bbox的左上角坐标为(x1, y2),右下角坐标为(x2, y2),则可求得bbox中心坐标(x_c, y_c)为:

x_c = x1 + (x2 - x1)/2 = (x1 + x2)/2
y_c = y1 + (y2 - y1)/2 = (y1 + y2)/2

假设yolo的5个数据分别为:label, x_, y_, w_, h_,则有对应关系:

x_ = (x1 + x2) / 2w
y_ = (y1 + y2) / 2h
w_ = (x2 - x1) / w
h_ = (y2 - y1) / h

反过来,则有:

x1 = w * x_ - 0.5 * w * w_
x2 = w * x_ + 0.5 * w * w_
y1 = h * y_ - 0.5 * h * h_
y2 = h * y_ + 0.5* h * h_

2. 代码

import cv2

# 假设图像为test.jpg
img = cv2.imread('test.jpg')
h, w, _ = img.shape


# yolo标注数据文件名为786_rgb_0616.txt
with open('786_rgb_0616.txt', 'r') as f:
	temp = f.read()
	temp = temp.split()
	# ['1', '0.43906', '0.52083', '0.34687', '0.15']

# 根据第1部分公式进行转换
x_, y_, w_, h_ = eval(temp[1]), eval(temp[2]), eval(temp[3]), eval(temp[4])

x1 = w * x_ - 0.5 * w * w_
x2 = w * x_ + 0.5 * w * w_
y1 = h * y_ - 0.5 * h * h_
y2 = h * y_ + 0.5* h * h_

# 画图验证,注意画图坐标要转换成int格式
cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0))

cv2.imshow('windows', img)
cv2.waitKey(0)

返回结果如下图所示,可以看到正确框选出了目标,验证正确。

在这里插入图片描述

结束。

版权声明:本文为CSDN博主「lokvke」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43508499/article/details/118600392

lokvke

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

小目标检测方法介绍

目标检测发展很快,但对于小目标 的检测还是有一定的瓶颈,特别是大分辨率图像小目标检测 。比如79202160,甚至1600016000的图像,还有一些遥感图像 。 图像的分辨率很大&#xf

YOLOX训练自己的VOC标注的数据

0. 前言 YOLOX是旷世在YOLO的基础上将anchor-free技术引入,从性能和速度上取得的更好的结果。具体可参考github相关代码及论文说明,此处介绍如何利用YOLOX训练自己的VOC数据集&#xff0