我正在尝试为三角测量过程获取 3x4 相机矩阵,但calibrateCamera()
仅返回 3x3 和 4x1 矩阵。< / p>
如何从这些矩阵中获取 3x4 ?
提前致谢!!
答案 0 :(得分:11)
calibrateCamera()返回你
一个3x3矩阵作为cameraMatrix,
一个4x1矩阵作为distCoeffs,
和rvecs和tvecs是3x1旋转(R)和3x1变换(t)矩阵的向量。
你想要的是ProjectionMatrix,它将[cameraMatrix]乘以[R | t]。
因此,它会回复你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矩阵