如何在python中计算OpenCV相机projectionMatrix

时间:2016-12-13 18:16:55

标签: python opencv triangulation projection-matrix

我正在尝试使用Python 2.7中的OpenCV 2.4为我的相机计算projection_matrix(我正在使用ps eye)。我需要cv2.triangulatePoints()。我已经使用cv2.calibrateCamera()(使用来自OpenCV示例的calibrate.py)进行了校准,所以我有rms,camera_matrix,dist_coefs,rvecs和tvecs。

但我实际上从这些参数计算projection_matrix有问题(我没有在网上找到任何Python示例)。

PS:我是否需要校准每个ps眼睛相机?我有3个,我想跟踪3D空间中的物体。

1 个答案:

答案 0 :(得分:0)

如果您只有一台摄像机,则投影矩阵应等于camera_matrix。只有一个并发症。

cv2.triangulatePoints定义为使用2个不同摄像头的2个视图。

文档还说明了

  

该函数重建三维点(均匀的   通过立体相机使用他们的观察结果。   投影矩阵可以从 stereoRectify()。

获得

所以,是的,您必须校准每个摄像机并校准每对摄像机,以便从一个摄像机检索每个摄像机矩阵和旋转矩阵以及平移矢量到#34;主摄像机"。

对于给定的几个相机,K1和K2相机矩阵,确实

主摄像机的投影矩阵(摄像机是世界参考系统)是

P1 = K1*[I | z]

其中I是identy矩阵,z是第四列中的0,0,0向量。 你可能会想到像

这样的东西
  1 0 0 0
  0 1 0 0 
  0 0 1 0

如果R是两个摄像机之间的旋转矩阵,那么两个摄像机之间的距离是,第二个投影矩阵是

P2 = K2*[R | t]

在python中,如果你无法从stereoRectify中获取矩阵,那么手动执行它的一种方法是

import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)