如何将Google Cloud Vision API多边形顶点转换为RectF的left/top/right/bottom参数
解决方案
核心原理
Google Cloud Vision API返回的normalizedVertices是取值范围在[0,1]的归一化坐标,数值对应占原始图像宽/高的比例。要获取可用于RectF的外接矩形参数,本质是计算所有顶点的最小轴对齐外接矩形,同时要先处理API返回中可能存在的坐标缺省情况:若顶点缺失x字段则默认取0,缺失y字段默认取0。
具体计算步骤
- 遍历当前检测对象的
normalizedVertices数组的所有顶点 - 初始化四个极值变量:
minX = 1.0f、maxX = 0.0f、minY = 1.0f、maxY = 0.0f - 逐个处理顶点:先补全缺省值
currentX = 顶点.x ?: 0f,currentY = 顶点.y ?: 0f - 对比更新极值:
minX = min(minX, currentX)、maxX = max(maxX, currentX)、minY = min(minY, currentY)、maxY = max(maxY, currentY) - 遍历完成后得到的四个归一化参数对应矩形的左、上、右、下边界
适配实际绘制尺寸
如果用于绘制的视图(比如ImageView)实际宽度为viewWidth、实际高度为viewHeight,将归一化参数换算为实际像素坐标即可直接生成RectF,示例代码(Kotlin Android)如下:
// 假设已经完成顶点遍历得到minX、maxX、minY、maxY val left = minX * viewWidth val top = minY * viewHeight val right = maxX * viewWidth val bottom = maxY * viewHeight val targetRect = RectF(left, top, right, bottom)
验证说明
你提供的响应示例中,笔记本电脑的四个顶点x范围为0.16580.5109,y范围为0.59960.9928,按上述算法计算得到的矩形完全匹配检测到的物体边界。该算法为通用最小外接矩形计算逻辑,哪怕后续API返回任意多边形顶点,也能正确输出外围矩形参数。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

