cv2.minAreaRect返回旋转矩形中心角度偏移90度问题咨询
问题根因
你遇到的cv2.minAreaRect结果偏移90度的问题,核心是坐标顺序不匹配:
np.where(thresh > 0)返回的结果顺序是(行索引, 列索引),对应图像坐标系的(y, x)cv2.minAreaRect要求输入的点集必须遵循OpenCV默认坐标规则,顺序为(x, y)
直接将np.where的结果列堆叠,相当于互换了x和y坐标,自然会出现90度偏移。部分对称样图(比如你提到的“thunder”图样)互换xy后结果差异不明显,才会出现部分场景运行正常的假象。
修复代码
仅需调整坐标堆叠的顺序即可,将原代码中:
coords = np.column_stack(np.where(thresh > 0))
修改为:
# 反转坐标顺序,从(y, x)转为(x, y)匹配OpenCV要求 coords = np.column_stack(np.where(thresh > 0)[::-1])
可选补充:角度规则说明
OpenCV 4.x版本中cv2.minAreaRect返回的角度值范围为[-90, 0),表示矩形宽边与x轴正方向的夹角,如果你需要转换为常规的[0, 180)角度范围,可以结合返回的矩形宽高做补正:
- 如果宽小于高,将角度加90度即可得到常规的旋转角度值
内容的提问来源于stack exchange,提问作者lorenzo
相关产品推荐
相关产品推荐

