solvePnP结果与预期结果差异太大(Python、OpenCV)
我有一辆车,上面有摄像头、imu和gps。这架照相机在开车时拍照。图片和gps坐标是同步的。现在,我正在尝试从图片(相对于imu)获取相机姿势,但是solvePnP结果与预期结果差异太大(Python、OpenCV),python,opencv,camera-calibration,pose-estimation,opencv-solvepnp,Python,Opencv,Camera Calibration,Pose Estimation,Opencv Solvepnp,我有一辆车,上面有摄像头、imu和gps。这架照相机在开车时拍照。图片和gps坐标是同步的。现在,我正在尝试从图片(相对于imu)获取相机姿势,但是solvePnP最终不会得到与预期结果类似的外部相机校准 更多背景信息:我正在使用Python(3.6.8)和OpenCV 4.0.0 我知道以下数据: 我有8个标记和它们在世界坐标中的精确位置 我有imu在世界坐标系下的轨迹 我有几个图片的标记的像素坐标(6576 x 4384像素) 我有内在的相机校准 [4]中的:图像\u点 出[4]: 数组([
solvePnP
最终不会得到与预期结果类似的外部相机校准
更多背景信息:我正在使用Python(3.6.8)和OpenCV 4.0.0
我知道以下数据:
:图像\u点
出[4]:
数组([[1911,2115.],
[2443., 2631.],
[1427., 2570.],
[1409., 2271.],
[1396., 1912.],
[1549., 1770.],
[2247., 1787.],
[2606,1794.],数据类型=32)
在[5]中:世界点
出[5]:
数组([-1.5156984e+00,-1.3494657e+00,0.0000000e+00],
[-2.9987667e+00,0.0000000e+00,0.0000000e+00],
[-9.3132257e-10,0.0000000e+00,0.0000000e+00],
[0.0000000e+00,-8.5239327e-01,0.0000000e+00],
[-1.5532847e-02,-1.8538033e+00,0.0000000e+00],
[-5.0486135e-01,-2.2495930e+00,0.0000000e+00],
[-2.5055323e+00,-2.2484162e+00,0.0000000 E+00],
[-3.4857810e+00,-2.2520051e+00,0.0000000e+00]],数据类型=float32)
在[6]中:cameraMatrix
出[6]:
矩阵([[2.81923164e+03,-1.36877792e+00,3.2698982E+03],
[0.00000000e+00,2.81857995e+03,2.24198230e+03],
[0.00000000e+00,0.00000000e+00,1.00000000e+00]]
在[7]中:distcoefs
Out[7]:数组([0.0278163,-0.01819595,-0.01031101,-0.0023199,-0.02813449])
目前,我的流程包括:
solvePnP
获得rvec
和tvec
cv2.Rogrigues(rvec)
获得旋转矩阵
camPos=-np.matrix(rotationMatrix).T*np.matrix(tvec)
数组([[0.65556006],
[1.19668318],
[1.37138227],
[0.64020471],
[0.55105675]])
然而,imu和摄像头之间的距离应该精确到2.4米(手动测量),并且根本不会改变(因为两者都固定在汽车顶部)
solvePnP是否可能输出错误的结果,或者我在流程中的其他地方出错了?
类似的问题,但没有答案。真的没有人吗?我需要提供更多吗?完整的源代码?