我正在尝试使用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空间中的物体。
答案 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)