我正在尝试使用opencv 2.4在python 2.7中为我的相机计算投射_matrix(我正在使用PS Eye)。我需要Cv2.triangulatepoints()。我已经使用cv2.calibratecamera()(使用OpENCV示例的Calibibrate.py)进行了校准,因此我有RMS,Camera_matrix,dist_coefs,rvecs和tvecs。
。但是我有一个问题实际上是从这些参数中计算proment_matrix的(我没有在线找到任何python示例)。
ps:我必须校准每个PS眼相机吗?我有3个,我想在3D空间中跟踪对象。
如果您只有一个相机,则投影矩阵应等于camera_matrix。只有一个并发症。
cv2.triangulatepoints定义可与来自2个不同摄像机的2个视图一起使用。
文档还指出
该函数重建了3维点(在同质中 坐标)通过使用立体声摄像机使用其观察结果。 可以从 stereorectify()。
获得预测矩阵
是的,您必须校准每个相机并校准每对摄像机,以便检索每个相机矩阵和旋转矩阵以及从一个相机到"主相机"的翻译向量。
对于给定的几个相机,带有K1和K2的相机矩阵,
的确如此主相机的投影矩阵(摄像机是世界参考系统)是
P1 = K1*[I | z]
其中i是识别矩阵,而z是第四列中的0,0,0向量。您可以认为
1 0 0 0
0 1 0 0
0 0 1 0
如果r是2个摄像机之间的旋转矩阵和两个摄像机之间的距离,则第二个投影矩阵为
P2 = K2*[R | t]
在python中,如果您无法从立体看法获得矩阵,则手动执行它的一种方法是
import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)