[英]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。
提前非常感谢。 任何建议都会非常有帮助!
标签需要进行不同的归一化——因为x
和y
是相对于屏幕中心的,它们实际上分别乘以W/2
和H/2
。 此外,宽度和高度尺寸必须分别乘以W
和H
——它们目前都被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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.