如何将多边形顶点转换为 rectF(left,top,right,bottom)?
how can I convert the polygon vertices to rectF(left,top,right,bottom)?
我正在使用 Google Cloud Vision API 来检测图像中的对象。来自 google 愿景 API 的响应采用以下形式。它 returns 归一化顶点数组。但是我只需要 4 点,因为 RectF.I 在将它放置在这里之前已经 googled 它但我无法得到任何适当的解决方案。
{
"responses": [
{
"localizedObjectAnnotations": [
{
"mid": "/m/01c648",
"name": "Laptop",
"score": 0.885833,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.16581687,
"y": 0.5996421
},
{
"x": 0.5108573,
"y": 0.5996421
},
{
"x": 0.5108573,
"y": 0.9928019
},
{
"x": 0.16581687,
"y": 0.9928019
}
]
}
},
{
"mid": "/m/04brg2",
"name": "Tableware",
"score": 0.8071477,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.61909163,
"y": 0.8264213
},
{
"x": 0.7196966,
"y": 0.8264213
},
{
"x": 0.7196966,
"y": 0.9963302
},
{
"x": 0.61909163,
"y": 0.9963302
}
]
}
},
{
"mid": "/j/984ysm",
"name": "Table top",
"score": 0.66904813,
"boundingPoly": {
"normalizedVertices": [
{
"y": 0.8069201
},
{
"x": 0.86148286,
"y": 0.8069201
},
{
"x": 0.86148286,
"y": 0.99502665
},
{
"y": 0.99502665
}
]
}
},
{
"mid": "/m/0d4v4",
"name": "Window",
"score": 0.5146187,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.004114019,
"y": 0.00019616824
},
{
"x": 0.3921472,
"y": 0.00019616824
},
{
"x": 0.3921472,
"y": 0.25323766
},
{
"x": 0.004114019,
"y": 0.25323766
}
]
}
}
]
}
]}
我想在检测到的对象周围绘制矩形,但我不确定如何从多边形顶点获取矩形点。多边形转矩形的算法是什么
API为您提供了四个点,即轴对齐矩形的四个角。四个角可以表示为:
- 左上角;
- 右上角;
- 右下角;
- 左下角。
每个角都是一个点,有两个坐标;比如左上角的两个坐标是(x=left, y=top)
,右下角的两个坐标是(x=right, y=bottom)
.
确定哪个点是左上角,哪个点是右下角,这将为您提供您寻求的四个值:
left = topleft.x
top = topleft.y
right = bottomright.x
bottom = bottomright.y
作为附加说明,如果您知道如何使用 minimum
或 maximum
,这些值将非常容易识别,因为例如:
right = max(left, right)
left = min(left, right)
是top = max(top, bottom)
还是top = min(top, bottom)
取决于坐标系的方向,所以你得自己想办法。例如,在数学绘图中我们几乎总是使用 top = max(top, bottom)
,但在描述屏幕上的像素坐标时,我们更经常使用 top = min(top, bottom)
.
我正在使用 Google Cloud Vision API 来检测图像中的对象。来自 google 愿景 API 的响应采用以下形式。它 returns 归一化顶点数组。但是我只需要 4 点,因为 RectF.I 在将它放置在这里之前已经 googled 它但我无法得到任何适当的解决方案。
{
"responses": [
{
"localizedObjectAnnotations": [
{
"mid": "/m/01c648",
"name": "Laptop",
"score": 0.885833,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.16581687,
"y": 0.5996421
},
{
"x": 0.5108573,
"y": 0.5996421
},
{
"x": 0.5108573,
"y": 0.9928019
},
{
"x": 0.16581687,
"y": 0.9928019
}
]
}
},
{
"mid": "/m/04brg2",
"name": "Tableware",
"score": 0.8071477,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.61909163,
"y": 0.8264213
},
{
"x": 0.7196966,
"y": 0.8264213
},
{
"x": 0.7196966,
"y": 0.9963302
},
{
"x": 0.61909163,
"y": 0.9963302
}
]
}
},
{
"mid": "/j/984ysm",
"name": "Table top",
"score": 0.66904813,
"boundingPoly": {
"normalizedVertices": [
{
"y": 0.8069201
},
{
"x": 0.86148286,
"y": 0.8069201
},
{
"x": 0.86148286,
"y": 0.99502665
},
{
"y": 0.99502665
}
]
}
},
{
"mid": "/m/0d4v4",
"name": "Window",
"score": 0.5146187,
"boundingPoly": {
"normalizedVertices": [
{
"x": 0.004114019,
"y": 0.00019616824
},
{
"x": 0.3921472,
"y": 0.00019616824
},
{
"x": 0.3921472,
"y": 0.25323766
},
{
"x": 0.004114019,
"y": 0.25323766
}
]
}
}
]
}
]}
我想在检测到的对象周围绘制矩形,但我不确定如何从多边形顶点获取矩形点。多边形转矩形的算法是什么
API为您提供了四个点,即轴对齐矩形的四个角。四个角可以表示为:
- 左上角;
- 右上角;
- 右下角;
- 左下角。
每个角都是一个点,有两个坐标;比如左上角的两个坐标是(x=left, y=top)
,右下角的两个坐标是(x=right, y=bottom)
.
确定哪个点是左上角,哪个点是右下角,这将为您提供您寻求的四个值:
left = topleft.x
top = topleft.y
right = bottomright.x
bottom = bottomright.y
作为附加说明,如果您知道如何使用 minimum
或 maximum
,这些值将非常容易识别,因为例如:
right = max(left, right)
left = min(left, right)
是top = max(top, bottom)
还是top = min(top, bottom)
取决于坐标系的方向,所以你得自己想办法。例如,在数学绘图中我们几乎总是使用 top = max(top, bottom)
,但在描述屏幕上的像素坐标时,我们更经常使用 top = min(top, bottom)
.