【发布时间】:2013-04-12 16:15:18
【问题描述】:
我正在尝试为三角测量过程获取 3x4 相机矩阵,但 calibrateCamera() 仅返回 3x3 和 4x1 矩阵。
我怎样才能从这些矩阵中得到 3x4?
提前致谢!!
【问题讨论】:
标签: opencv triangulation camera-calibration
我正在尝试为三角测量过程获取 3x4 相机矩阵,但 calibrateCamera() 仅返回 3x3 和 4x1 矩阵。
我怎样才能从这些矩阵中得到 3x4?
提前致谢!!
【问题讨论】:
标签: opencv triangulation camera-calibration
calibrateCamera() 返回您
一个 3x3 矩阵作为 cameraMatrix,
作为 distCoeffs 的 4x1 矩阵,
rvecs 和 tvecs 是 3x1 旋转(R)和 3x1 变换(t)矩阵的向量。
你想要的是 ProjectionMatrix,它是 [cameraMatrix] 乘以 [R|t]。
因此,它会返回一个 3x4 投影矩阵。
您可以阅读OpenCV documentation 了解更多信息。
【讨论】:
如果您使用的是 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 矩阵
【讨论】: