我正在使用谷歌云視覺API來檢測影像中的物體。谷歌視覺API的回應形式如下。它回傳規范化頂點的陣列。但我只需要RectF的4個點。在這里提出這個問題之前,我已經在谷歌上搜索過,但我無法得到任何適當的解決方案。
{
"response": [
{
"localizedObjectAnnotations"/span>: [
{
"mid": "/m/01c648",
"name": "Laptop",
"分數": 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",
"分數": 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",
"得分": 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"/span>,
"name": "視窗",
"得分": 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
}
]
}
}
]
}
]}
我想在檢測到的物件周圍繪制矩形,但我不確定如何從多邊形頂點獲得矩形點。將多邊形轉換為矩形的演算法是什么呢?
uj5u.com熱心網友回復:
API為你提供了四個點,它們是一個軸對齊的矩形的四個角。這四個角可以被稱為:
- 左上角
- 左上角;
- 右上角;
- 右下角;
- 左下角。
每個角是一個有兩個坐標的點;例如,左上角的兩個坐標是(x=left, y=top),右下角的兩個坐標是(x=right, y=bottom)。
確定哪一點是左上角,哪一點是右下角,這將給你帶來你所尋求的四個值:
確定哪一點是左上角,哪一點是右下角。
left = topleft.x
top = topleft.y
右 = bottomright.x
底部=右下角.y
另外,如果你知道如何取最小值或最大值,這些值就非常容易識別,因為例如:
right = max(left, right)
左 = min(left, right)
究竟是top = max(top, bottom)還是top = min(top, bottom)取決于坐標系的方向,所以你必須自己弄清楚這個問題。例如,在數學圖中,我們幾乎總是使用top = max(top, bottom),但是當描述螢屏上的像素坐標時,我們更經常使用top = min(top, bottom)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319994.html
標籤:
