我有Yolo保存在.txt文件中的对象的格式边界框注释。现在我想加载这些坐标并使用 将其绘制在图像上OpenCV,但我不知道如何将这些浮点值转换为OpenCV格式坐标值
我尝试了这篇文章,但没有帮助,下面是我正在尝试做的示例示例
代码和输出
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)
Run Code Online (Sandbox Code Playgroud)
实际注释和图像
0 0.286972 0.647157 0.404930 0.371237
0 0.681338 0.366221 0.454225 0.418060
Run Code Online (Sandbox Code Playgroud)
我正在使用 Microsoft 的CustomVision.ai构建自定义视觉应用程序。
我正在使用本教程。
在对象检测项目中标记图像时,需要使用标准化坐标指定每个标记对象的区域。
我有一个 XML 文件,其中包含有关图像的注释,例如名为sample_1.jpg:
<annotation>
<filename>sample_1.jpg</filename>
<size>
<width>410</width>
<height>400</height>
<depth>3</depth>
</size>
<object>
<bndbox>
<xmin>159</xmin>
<ymin>15</ymin>
<xmax>396</xmax>
<ymax>302</ymax>
</bndbox>
</object>
</annotation>
Run Code Online (Sandbox Code Playgroud)
我必须根据提供的教程将边界框坐标从 xmin,xmax,ymin,ymax 转换为标准化的 x,y,w,h 坐标。
谁能给我一个转换函数?
这是来自图像的注释文件:
0 0.6142131979695431 0.336 0.467005076142132 0.392
Run Code Online (Sandbox Code Playgroud)
第一个0是类标签。0.6142131979695431和0.336是边界框的 x 和 y 坐标。0.467005076142132和0.392是边界框的宽度和高度。但是,我不明白的是为什么 x、y、宽度和高度都在 [0,1] 浮点区间内。有人告诉我这是一个百分比,但是相对于什么的百分比呢?
例如,我正在编写构建合成数据集的软件。这是我制作的一张训练图像。它在我想要检测的对象周围有边界框。
边框完美地包裹了 Wizards 和 Ubuntu 徽标。那么,我该如何像上面的格式一样注释它们呢?