使用cv2.solvePnP生成立体相机矩阵

时间:2019-11-14 15:49:38

标签: python opencv computer-vision opencv-solvepnp

我想为两个具有已知校准矩阵的图片找到两个相机矩阵。我知道位置的每张图片中都有四个对象点。目标是使用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

但不是关于如何计算实际的相机矩阵(例如,如何更改旋转矩阵),至少我发现的东西不起作用。 尝试获取相对于世界坐标系进行三角测量的相机矩阵是否正确? 您是否有关于如何根据世界坐标系检索相机矩阵的建议? 任何想法/建议都会有所帮助。

0 个答案:

没有答案