文章目录[隐藏]
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
暂无评论