【发布时间】:2021-04-15 14:53:13
【问题描述】:
我已经训练了一个 Yolo4 网络,它给我的边界框如下:
img_array = cv2.cvtColor(cv2.imread('image.png'), cv2.COLOR_BGR2RGB)
classes, scores, bboxes = model.detect(img_array, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)
box = bboxes[0]
(x, y) = (box[0], box[1])
(w, h) = (box[2], box[3])
当我使用cv2.rectangle 保存图像时:
cv2.rectangle(img_array, (x, y), (x + w, y + h), (127,0,75), 1)
cv2.imwrite('image.png',img_array)
IT 给了我一个很好的边界框。我想使用这个box 和图像数组的形状来创建一个文本文件,该文件采用Yolov4 格式作为x,y,w,h 浮动值介于0 和1 相对 图像大小之间。 p>
假设我的价值观是:
img_array.shape -> (443, 1265, 3)
box -> array([489, 126, 161, 216], dtype=int32)
所以它给了我
(x, y) = (box[0], box[1]) -> (489, 126)
(w, h) = (box[2], box[3]) -> (161, 216)
我在文本文件中使用LabelImg 创建的边界框也为
0.453125 0.538462 0.132212 0.509615 # 0 is the class
如何使用这些坐标获取Yolov4 格式?这有点令人困惑。我使用了很多来自this answer 的代码似乎不起作用。
另外,我尝试使用此代码,但我不知道这是否正确。即使是这样,我也不知道如何获得x_, y_
def yolov4_format(img_shape,box):
x_img, y_img, c = img_shape
(x, y) = (box[0], box[1])
(w, h) = (box[2], box[3])
x_, y_ = None # logic for these?
w_ = w/x_img
h_ = h/y_img
return x_,y_, w_, h_
【问题讨论】:
标签: python numpy opencv computer-vision yolo