我想为两个具有已知校准矩阵的图片找到两个相机矩阵。我知道位置的每张图片中都有四个对象点。目标是使用OpenCV中的solvePnP函数对两个相机矩阵进行三角剖分。奇怪的是(至少对我来说),这可以与下面显示的代码配合使用:
_, rVec1, tVec1 = cv2.solvePnP(objectPoints.astype('float32'), picturePoints1, Kmatrix, distCoeffs, flags = cv2.SOLVEPNP_ITERATIVE)
Rmat1 = cv2.Rodrigues(rVec1) [0]
P1 = np.dot(Kmatrix,np.c_[Rmat1,tVec1]) #build the first camera matrix
_, rVec2, tVec2 = cv2.solvePnP(objectPoints.astype('float32'), picturePoints2, Kmatrix, distCoeffs, flags = cv2.SOLVEPNP_ITERATIVE)
Rmat2 = cv2.Rodrigues(rVec2)[0]
P2 = np.dot(Kmatrix,np.c_[Rmat2,tVec2]) #build the second camera matrix
vec = linearLSTriangulation(picturePoints1[0],picturePoints2[0],P1,P2) #reconstruct a point
但是,solvePnP函数返回相对于每个相机中心的旋转矢量和平移矢量(但是三角剖分仍然可以正常工作吗?),但是,我想获得相对于世界坐标系的正确旋转和平移。我在网上看到了很多有关计算新翻译向量的内容:
tVec1New = np.dot(-Rmat1.T,tVec1) #translation vector in respect to the world coordinate frame
但不是关于如何计算实际的相机矩阵(例如,如何更改旋转矩阵),至少我发现的东西不起作用。 尝试获取相对于世界坐标系进行三角测量的相机矩阵是否正确? 您是否有关于如何根据世界坐标系检索相机矩阵的建议? 任何想法/建议都会有所帮助。