Vous dites que nous avons 3x1 rotation, mais dans la formule ci-dessous, il est 3x3 (r_11, ..., r_33). Comment est-ce possible? Pouvez-vous ajouter un peu de code c++ pour le calcul de la matrice de projection de camMatrix (3x3) et distMatrix (4x1)? J'ai besoin d'appeler le Rodriguez fonction, non? c'est correct, Rodriguez convertir le vecteur de rotation de matrice de rotation qui vous pouvez utiliser dans la formule ci-dessus
Si vous utilisez cameraCalibrate(), vous devez être en train de mtx, rvecs et tvecs.
R est 3x1 laquelle vous avez besoin de les convertir à 3x3 à l'aide de Rodrigues méthode de opencv.
Donc le code final ressemblera à quelque chose comme:
rotation_mat = np.zeros(shape=(3, 3))
R = cv2.Rodrigues(rvecs[0], rotation_mat)[0]
P = np.column_stack((np.matmul(mtx,R), tvecs[0]))
en supposant que vous avez utilisé plusieurs images pour l'étalonnage de la caméra, ici, je suis en utilisant uniquement le premier à obtenir P de la matrice pour la première image. Pour toute autre image, vous pouvez utiliser rvecs[IMAGE_NUMBER], tvecs[IMAGE_NUMBER] pour la P correspondante de la matrice
calibrateCamera() vous renvoie
une matrice de 3x3 comme cameraMatrix,
un 4x1 matrice distCoeffs,
et rvecs et tvecs qui sont des vecteurs de 3x1 de rotation(R) et 3x1 transformation(t) matrices.
Ce que vous voulez est ProjectionMatrix, qui se multiplient [cameraMatrix] par [R|t].
Par conséquent, il returs vous un 3x4 ProjectionMatrix.
Vous pouvez lire OpenCV documentation pour plus d'info.
J'ai besoin d'appeler le
Rodriguez
fonction, non?c'est correct, Rodriguez convertir le vecteur de rotation de matrice de rotation qui vous pouvez utiliser dans la formule ci-dessus
OriginalL'auteur aisa
Si vous utilisez cameraCalibrate(), vous devez être en train de mtx, rvecs et tvecs.
R est 3x1 laquelle vous avez besoin de les convertir à 3x3 à l'aide de Rodrigues méthode de opencv.
Donc le code final ressemblera à quelque chose comme:
en supposant que vous avez utilisé plusieurs images pour l'étalonnage de la caméra, ici, je suis en utilisant uniquement le premier à obtenir P de la matrice pour la première image. Pour toute autre image, vous pouvez utiliser rvecs[IMAGE_NUMBER], tvecs[IMAGE_NUMBER] pour la P correspondante de la matrice
OriginalL'auteur sam