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

2024-05-29 03:42:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组图像和它们对应的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

但是它没有像你在这里看到的那样正确地获取图像的部分extractedImage

这是我的训练数据集的一部分,所以我之前使用一些工具裁剪了这些部分,所以标签中不会有任何错误。另外,所有的图像都以这种方式进行了不正确的裁剪,我已经显示了其中一幅图像的输出

先谢谢你。任何建议都会非常有用


Tags: sample对象图像imagelabelsobject图片yolo
1条回答
网友
1楼 · 发布于 2024-05-29 03:42:18

标签需要以不同的方式进行规范化-因为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()

输出:

enter image description here]1

希望这有帮助

相关问题 更多 >

    热门问题