使用OpenCV solvePnP做姿态估计时3D坐标轴错位问题求助
OpenCV solvePnP平面对象位姿计算坐标轴错位问题
我是技术新手,使用OpenCV的solvePnP计算平面对象的位姿时,出现输出结果异常的问题:调用drawFrameAxes绘制的坐标轴始终显示在画面角落,坐标轴X轴为红色、Y轴为绿色、Z轴为蓝色。
绘制坐标轴代码:drawFrameAxes(frame_copy, cameraMatrix, distanceCoeffisions, rvec, tvec, length);
生成3D点的代码如下(无深度信息直接将z坐标设为0):
Points.push_back(Point3f(inliers[i].pt.x, inliers[i].pt.y, 0));
常见排查思路
- 3D世界坐标定义校验:不要直接把2D图像的像素坐标作为3D世界坐标的x/y值,世界坐标需要根据目标平面的实际物理尺寸自定义,例如将目标平面左上角设为(0,0,0),按照实际长宽比例设置其他顶点坐标,单位可选用米/厘米。
- 点对匹配校验:确认输入solvePnP的3D世界点序列和2D图像点序列顺序一一对应,顺序错配会直接导致位姿求解完全偏离实际值。
- 相机参数校验:检查相机内参矩阵、畸变系数是否和当前使用的摄像头匹配,标定精度不足、参数混用是最常见的位姿求解错误原因。
- 变换参数校验:如果对solvePnP输出的rvec、tvec做了额外坐标变换,确认变换逻辑符合坐标系转换规则,避免参数被错误修改后传入绘制函数。
问题解决方案
该问题已通过修复相机标定参数解决。
内容的提问来源于stack exchange,提问作者lexi
相关产品推荐
相关产品推荐

