矩形角度
拖动圆盘或滑块,观察长边方向如何映射到 [−90°, 90°)。圆盘支持方向键、Home、End 和 Shift + 方向键。
矩形角度为什么会是 −90°?
「掩码转最小外接矩」将有效目标转换为 le90 旋转框:
[cx, cy, w, h, angle]
cx, cy:矩形中心坐标。w, h:长边和短边,满足w >= h。angle:长边相对图像 X 轴的角度,接口使用弧度,范围为[-π/2, π/2);换算为度是 [−90°, 90°),包含 −90°,不包含 90°。
模块先用 OpenCV 求最小外接矩;当返回的宽小于高时,交换宽高并给角度加 90°,再转为弧度并归一化。因此,不能把演示值直接当成 OpenCV 原始返回的角度。
图像坐标 X 向右、Y 向下,所以演示中顺时针为正。长边轴旋转 180° 后仍表示同一条轴;仅靠矩形几何不能区分物体的头尾。竖直长边的 90° 与 270° 都归一化为 −90°,这本身不表示计算错误。
常见角度对照
下表输入是已确定的长边方向,不是未经宽高处理的 OpenCV 角度:
| 长边方向(度) | le90(度) | 接口 angle(弧度) |
|---|---|---|
| 0° / 180° / 360° | 0° | 0 |
| 45° / 225° | 45° | π/4 |
| 90° / 270° | −90° | −π/2 |
| 135° / 315° | −45° | −π/4 |
角度演示采用下列等价的按度归一化公式(JavaScript 的负数余数需额外处理):
((angle + 90) % 180 + 180) % 180 - 90
这一步只归一化已经选定的长边方向,不处理掩码拟合,也不修改接口值。正方形没有唯一长边,接近正方形或轮廓有噪声时,选边可能变化;不能据此推断物体朝向。
如何核对输出
- 确认查看的是「掩码转最小外接矩」的结果,而非其他节点的角度字段。
- 将接口角度乘以
180 / π后再与演示的度数对比,不把弧度直接当作度。 - 同时查看宽高与可视化矩形,确认长边方向;不要只看角度正负判断结果对错。