我有保存在.txt
文件中的对象的Yolo
边界框注解。现在我想加载这些坐标并使用OpenCV
将其绘制在图像上,但我不知道如何将这些浮点值转换为OpenCV
坐标值
我尝试了这个post,但它没有帮助,下面是我尝试做的一个示例
代码和输出
import matplotlib.pyplot as plt
import cv2
img = cv2.imread(<image_path>)
dh, dw, _ = img.shape
fl = open(<label_path>, 'r')
data = fl.readlines()
fl.close()
for dt in data:
_, x, y, w, h = dt.split(' ')
nx = int(float(x)*dw)
ny = int(float(y)*dh)
nw = int(float(w)*dw)
nh = int(float(h)*dh)
cv2.rectangle(img, (nx,ny), (nx+nw,ny+nh), (0,0,255), 1)
plt.imshow(img)
实际注解和图像
0 0.286972 0.647157 0.404930 0.371237
0 0.681338 0.366221 0.454225 0.418060
4条答案
按热度按时间cyej8jka1#
关于这个主题还有另一个问答,在接受的答案下面有一条有趣的评论。底线是,YOLO坐标对图像有一个不同的中心w.r.t.。不幸的是,评论员没有提供Python端口,所以我在这里做了:
对于Lenna的图像,这就是输出,我认为它显示了相对于图像的正确坐标:
1请对链接的答案和评论投赞成票。
tzdcorbm2#
使用pybboxes可以更直接地完成这些工作。
就你的情况而言,
请注意,转换为YOLO格式需要图像宽度和高度进行缩放。
o2rvlv0m3#
对我来说很有效:)
dwbf0jvd4#