YOLO数据格式说明与转换

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)

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

在这里插入图片描述

结束。

猜你喜欢

转载自blog.csdn.net/weixin_43508499/article/details/118600392
今日推荐