2016-04-22 2 views
-1

Je suis capable de calculer le calibrage de la caméra en utilisant OpenCV en Python. Cependant, ce dont j'ai vraiment besoin, c'est la matrice de projection. En regardant les équations de la docs, il semble que ce soit P = K[R|T] où K est la matrice intrinsèque, R est la matrice de rotation, et T est le vecteur de traduction. C'est le code que j'ai fait pour calculer la matrice de projection:OpenCV: Comment trouver la matrice de projection à partir de la sortie calibrateCamera()?

ret, matrix, distCoef, rvecs, tvecs = cv2.calibrateCamera([world_points], [corners], gray.shape[::-1], flags=cv2.CALIB_USE_INTRINSIC_GUESS) 

K = matrix 
R = cv2.Rodrigues(rvecs[0])[0] 
T = tvecs[0] 
RT = np.concatenate((R,T),axis=1) 
P = np.dot(K, RT) 

Est-ce correct? À ma connaissance, je devrais être capable de le vérifier en faisant P * [x; y; z; 1] où (x, y, z) est un point du monde, et la sortie doit être la coordonnée de pixel correspondante. J'ai essayé ceci, mais les sorties semblent très fausses. Est-ce que cela signifie que c'était un mauvais calibrage, ou ai-je construit incorrectement P?

Répondre

-1

Je pense que je l'ai corrigé - comme il s'est avéré, j'ai donné quelques mauvais paramètres à calibrateCamera(). J'ai réécrit le code largement basé sur calibrate.py fourni avec le dossier d'échantillons OpenCV. J'ai suivi le reste des concepts que j'ai mentionnés dans mon article original (construction de P, vérification de l'erreur de reprojection, etc.) et cela me donne des résultats beaucoup plus raisonnables maintenant.