如何将多边形顶点转换为 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

作为附加说明,如果您知道如何使用 minimummaximum,这些值将非常容易识别,因为例如:

right = max(left, right)
left  = min(left, right)

top = max(top, bottom)还是top = min(top, bottom)取决于坐标系的方向,所以你得自己想办法。例如,在数学绘图中我们几乎总是使用 top = max(top, bottom),但在描述屏幕上的像素坐标时,我们更经常使用 top = min(top, bottom).