Si vous n'avez qu'une seule caméra, la matrice de projection doit être égale à camera_matrix. Il n'y a qu'une seule complication. Le cv2.triangulatePoints est défini pour fonctionner avec 2 vues de 2 caméras différentes.
Documentation indique également que
La fonction reconstitue des points en 3 dimensions (en coordonnées homogènes ) en utilisant leurs observations avec un appareil photo stéréo. Les matrices de projections peuvent être obtenues à partir de stereoRectify().
Alors oui, vous devez calibrer chaque caméra et calibrer chaque paire de caméras afin de récupérer chaque matrice de la caméra et la matrice de rotation et le vecteur de translation d'une caméra à la « caméra principale ».
Pour un couple donné des caméras, avec K1 et K2 les matrices de la caméra, il est vrai que
La matrice de projection de la caméra principale (la caméra est le système de référence mondial) est
P1 = K1*[I | z]
où I est la matrice identy et z est un vecteur 0,0,0 dans la quatrième colonne. Vous pourriez penser quelque chose comme
1 0 0 0
0 1 0 0
0 0 1 0
Si R est la matrice de rotation entre les 2 caméras et t la distance entre les deux caméras, la deuxième matrice de projection est
P2 = K2*[R | t]
En python, si vous le pouvez ne pas obtenir les matrices de stereoRectify, une méthode pour le faire manuellement
import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)
voir ceci: http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibr ation/py_calibration.html – eyllanesc