【问题标题】:how can i get the camera projection matrix out of calibrateCamera() return values如何从 calibrateCamera() 返回值中获取相机投影矩阵
【发布时间】:2013-04-12 16:15:18
【问题描述】:

我正在尝试为三角测量过程获取 3x4 相机矩阵,但 calibrateCamera() 仅返回 3x34x1 矩阵。

我怎样才能从这些矩阵中得到 3x4

提前致谢!!

【问题讨论】:

    标签: opencv triangulation camera-calibration


    【解决方案1】:

    calibrateCamera() 返回您
    一个 3x3 矩阵作为 cameraMatrix,
    作为 distCoeffs 的 4x1 矩阵, rvecs 和 tvecs 是 3x1 旋转(R)和 3x1 变换(t)矩阵的向量。

    你想要的是 ProjectionMatrix,它是 [cameraMatrix] 乘以 [R|t]。

    因此,它会返回一个 3x4 投影矩阵。
    您可以阅读OpenCV documentation 了解更多信息。

    【讨论】:

    • 你说我们有 3x1 旋转,但在下面的公式中它是 3x3 (r_11, ..., r_33)。这怎么可能?你能添加一些c++代码来计算camMatrix(3x3)和distMatrix(4x1)的投影矩阵吗?
    • 没错,Rodriguez 将旋转向量转换为旋转矩阵,可以在上面的公式中使用
    【解决方案2】:

    如果您使用的是 cameraCalibrate(),您必须获得 mtx、rvecs 和 tvecs。 R 是 3x1,您需要使用 opencv 的 Rodrigues 方法将其转换为 3x3。 所以最终的代码看起来像:

    R = cv2.Rodrigues(rvecs[0])[0]
    t = tvecs[0]
    Rt = np.concatenate([R,t], axis=-1) # [R|t]
    P = np.matmul(mtx,Rt) # A[R|t]
    

    假设您使用了多张图像来校准相机,这里我只使用第一个来获取第一张图像的 P 矩阵。对于任何其他图像,您可以将 rvecs[IMAGE_NUMBER]、tvecs[IMAGE_NUMBER] 用于相应的 P 矩阵

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 2015-04-11
      • 2019-08-10
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多