Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
solvePnP结果与预期结果差异太大(Python、OpenCV)_Python_Opencv_Camera Calibration_Pose Estimation_Opencv Solvepnp - Fatal编程技术网

solvePnP结果与预期结果差异太大(Python、OpenCV)

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]: 数组([

我有一辆车,上面有摄像头、imu和gps。这架照相机在开车时拍照。图片和gps坐标是同步的。现在,我正在尝试从图片(相对于imu)获取相机姿势,但是
solvePnP
最终不会得到与预期结果类似的外部相机校准

更多背景信息:我正在使用Python(3.6.8)和OpenCV 4.0.0

我知道以下数据:

  • 我有8个标记和它们在世界坐标中的精确位置
  • 我有imu在世界坐标系下的轨迹
  • 我有几个图片的标记的像素坐标(6576 x 4384像素)
  • 我有内在的相机校准
  • [4]中的
    :图像\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])
    
    目前,我的流程包括:

  • 我将所有世界坐标转换为本地标记坐标 使所有标记的z坐标为0(参见代码示例中的[4])。起初,我 没有这一步我就试过了,但我读了很多教程,而且很成功 似乎校准以某种方式假设了这一点,但我不确定。如果我错了,请纠正我
  • 我使用
    solvePnP
    获得
    rvec
    tvec
  • 我应用
    cv2.Rogrigues(rvec)
    获得
    旋转矩阵
  • 然后,通过
    camPos=-np.matrix(rotationMatrix).T*np.matrix(tvec)
  • 在那之后,我比较了imu和估计的摄像机位置之间的距离,结果是大约1米,但并不一致。以下是5张样本图像的结果

    数组([[0.65556006],
    [1.19668318],
    [1.37138227],
    [0.64020471],
    [0.55105675]])
    
    然而,imu和摄像头之间的距离应该精确到2.4米(手动测量),并且根本不会改变(因为两者都固定在汽车顶部)

    solvePnP是否可能输出错误的结果,或者我在流程中的其他地方出错了?


    类似的问题,但没有答案。

    真的没有人吗?我需要提供更多吗?完整的源代码?