繁体   English   中英

从 YOLO 边界框坐标中提取单独的图像

[英]Extracting separate images from YOLO bounding box coordinates

我有一组图像及其对应的 YOLO 坐标。 现在我想将这些 YOLO 坐标表示的对象提取到单独的图像中。

但这些坐标采用浮点表示法,因此无法使用拼接。

这是一张图片Sample Image对应的 YOLO 坐标是

labels = [0.536328, 0.5, 0.349219, 0.611111]

我读了我的图片如下:

image = cv2.imread('frame0.jpg')

然后我想使用类似image[y:y+h,x:x+w]的东西,就像我在类似问题中看到的那样。 但是变量是浮点数,所以我尝试使用图像1280 x 720的尺寸将它们转换为整数,如下所示:

object = [int(label[0]*720), int(label[1]*720), int(label[2]*1280), int(label[3]*1280)]
x,y,w,h = object

但它没有正确获取图像的一部分,正如您在此处所见的extractImage

这是我的训练数据集的一部分,所以我之前使用一些工具裁剪了这些部分,所以我的标签不会有任何错误。 此外,所有图像都以这种方式错误地裁剪,我已经为其中 1 张图像展示了 output。

提前非常感谢。 任何建议都会非常有帮助!

标签需要进行不同的归一化——因为xy是相对于屏幕中心的,它们实际上分别乘以W/2H/2 此外,宽度和高度尺寸必须分别乘以WH ——它们目前都被W (1280) 标准化。 这是我解决它的方法:

import cv2
import matplotlib.pyplot as plt

label = [0.536328, 0.5, 0.349219, 0.611111]
img = cv2.imread('P6A4J.jpg')

H, W, _ = img.shape
object = [int(label[0]*W/2), int(label[1]*H/2), int(label[2]*W), int(label[3]*H)]

x,y,w,h = object
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(img[y:y+h, x:x+w])
plt.show()


plt.show()

Output:

在此处输入图像描述 ] 1

希望这可以帮助!

检测.py

作物将保存在 runs/detect/exp/crops 下,每个检测到的 class 都有一个目录。

python detect.py --save-crop

https://github.com/ultralytics/yolov5/issues/5412

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM