如何为OpenCV使用矩形中的标准化坐标

时间:2018-08-08 13:21:37

标签: python python-3.x opencv microsoft-cognitive

我正在使用Microsoft Custom Vision服务通过Python SDK进行对象检测。我能够做出预测,并且尝试使用从预测返回的边界框信息来使用OpenCV在图像上覆盖一个矩形。

但是,我不确定如何从自定义视觉服务返回的标准化坐标到OpenCV rectangle函数接受的点顶点进行精确计算。

以下是从服务返回的边界框示例:

{'left': 0.146396145,
 'top': 0.0305180848,
 'width': 0.373975337,
 'height': 0.570280433}

目前,我正在下面进行这些计算。 xy值看起来好像在正确计算,但是我不确定如何计算第二个顶点。图像形状已调整为(400, 400)

for pred in predictions:
    x = int(pred.bounding_box.left * img.shape[0])
    y = int(pred.bounding_box.top * img.shape[1])

    width = int(pred.bounding_box.width * img.shape[0])
    height = int(pred.bounding_box.height * img.shape[1])

    img = cv2.rectangle(img, (x,y), (width,height), (0,0,255), 2)

这是上面的代码生成的图像: enter image description here

第一个方框看起来还不够远,而第二个方框看起来像是产生了一个矩形,正好相反。

有人知道如何从归一化坐标正确计算这些值吗?

1 个答案:

答案 0 :(得分:4)

opencv-python中的矩形参数为point_1和point_2。像这样:

for pred in predictions:
    x = int(pred.bounding_box.left * img.shape[0])
    y = int(pred.bounding_box.top * img.shape[1])

    x2 = x + int(pred.bounding_box.width * img.shape[0])
    y2 = y + int(pred.bounding_box.height * img.shape[1])

    img = cv2.rectangle(img, (x,y), (x2,y2), (0,0,255), 2)