我正在使用Microsoft Custom Vision服务通过Python SDK进行对象检测。我能够做出预测,并且尝试使用从预测返回的边界框信息来使用OpenCV在图像上覆盖一个矩形。
但是,我不确定如何从自定义视觉服务返回的标准化坐标到OpenCV rectangle
函数接受的点顶点进行精确计算。
以下是从服务返回的边界框示例:
{'left': 0.146396145,
'top': 0.0305180848,
'width': 0.373975337,
'height': 0.570280433}
目前,我正在下面进行这些计算。 x
和y
值看起来好像在正确计算,但是我不确定如何计算第二个顶点。图像形状已调整为(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)
第一个方框看起来还不够远,而第二个方框看起来像是产生了一个矩形,正好相反。
有人知道如何从归一化坐标正确计算这些值吗?
答案 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)