8

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

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

提前致谢!!

4

2 回答 2

12

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

你想要的是 ProjectionMatrix,它是 [cameraMatrix] 乘以 [R|t]。 3D转2D投影

因此,它会返回一个 3x4 ProjectionMatrix。
您可以阅读OpenCV 文档以获取更多信息。

于 2013-10-29T12:36:33.530 回答
0

如果你使用 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 矩阵

于 2019-02-02T16:53:24.640 回答