gpt4 book ai didi

python - 如何将 Yolo 格式的边界框坐标转换为 OpenCV 格式

转载 作者:行者123 更新时间:2023-12-02 16:17:54 26 4
gpt4 key购买 nike

我有 Yolo格式保存在 .txt 中的对象的边界框注释文件。现在我想加载这些坐标并使用 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)
enter image description here
实际注释和图像
0 0.286972 0.647157 0.404930 0.371237 
0 0.681338 0.366221 0.454225 0.418060
enter image description here

最佳答案

还有一个关于这个主题的问答,还有 this接受的答案下方有 1 条有趣的评论。最重要的是,YOLO 坐标具有不同的居中 w.r.t。到图像。不幸的是,评论员没有提供 Python 端口,所以我在这里做了:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread(<image_path>)
dh, dw, _ = img.shape

fl = open(<label_path>, 'r')
data = fl.readlines()
fl.close()

for dt in data:

# Split string to float
_, x, y, w, h = map(float, dt.split(' '))

# Taken from https://github.com/pjreddie/darknet/blob/810d7f797bdb2f021dbe65d2524c2ff6b8ab5c8b/src/image.c#L283-L291
# via https://stackoverflow.com/questions/44544471/how-to-get-the-coordinates-of-the-bounding-box-in-yolo-object-detection#comment102178409_44592380
l = int((x - w / 2) * dw)
r = int((x + w / 2) * dw)
t = int((y - h / 2) * dh)
b = int((y + h / 2) * dh)

if l < 0:
l = 0
if r > dw - 1:
r = dw - 1
if t < 0:
t = 0
if b > dh - 1:
b = dh - 1

cv2.rectangle(img, (l, t), (r, b), (0, 0, 255), 1)

plt.imshow(img)
plt.show()
因此,对于某些 Lenna 图像,这将是输出,我认为它显示了正确的坐标 w.r.t.你的形象:
Output
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.5
Matplotlib: 3.3.2
OpenCV: 4.4.0
----------------------------------------

1请为链接的答案和评论点赞。

关于python - 如何将 Yolo 格式的边界框坐标转换为 OpenCV 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64096953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com