如何从calibrateCamera()返回值中获取相机投影矩阵

时间:2013-04-19 09:43:49

标签: opencv triangulation camera-calibration

我正在尝试为三角测量过程获取 3x4 相机矩阵,但calibrateCamera()仅返回 3x3 4x1 矩阵。< / p>

如何从这些矩阵中获取 3x4

提前致谢!!

2 个答案:

答案 0 :(得分:11)

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

你想要的是ProjectionMatrix,它将[cameraMatrix]乘以[R | t]。 3D into 2D Projection

因此,它会回复你3x4 ProjectionMatrix 您可以阅读OpenCV documentation了解更多信息。

答案 1 :(得分:0)

如果您使用cameraCalibrate(),则必须是获得MTX,rvecs和tvecs。 R是3x1,您需要使用opencv的Rodrigues方法转换为3x3。 因此,最终代码将类似于:

rotation_mat = np.zeros(shape=(3, 3))
R = cv2.Rodrigues(rvecs[0], rotation_mat)[0]
P = np.column_stack((np.matmul(mtx,R), tvecs[0]))

假设你已经使用多个图像来校准相机,我在这里只用第一个获得第一图像P矩阵。对于任何其他的图像可以使用rvecs [IMAGE_NUMBER],tvecs [IMAGE_NUMBER]为相应的P矩阵