Pozycja kamery we współrzędnych świata z cv :: resolvePnP
Mam skalibrowaną kamerę (macierz wewnętrzna i współczynniki zniekształceń) i chcę znać położenie kamery znając niektóre punkty 3d i odpowiadające im punkty na obrazie (punkty 2d).
wiem tocv::solvePnP
mógł mi pomóc i po przeczytaniuto ito Rozumiem, że ja wyjściami resolPnPrvec
itvec
to obrót i translacja obiektu w układzie współrzędnych kamery.
Muszę więc sprawdzić obrót / translację kamery w światowym układzie współrzędnych.
Z powyższych linków wynika, że kod jest prosty, w Pythonie:
found,rvec,tvec = cv2.solvePnP(object_3d_points, object_2d_points, camera_matrix, dist_coefs)
rotM = cv2.Rodrigues(rvec)[0]
cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)
Nie znam rzeczy python / numpy (używam C ++), ale to nie ma dla mnie większego sensu:
rvec, tvec wyjście z resolvePnP to macierz 3x1, 3 wektory elementówcv2.Rodrigues (rvec) to macierz 3x3cv2.Rodrigues (rvec) [0] to macierz 3x1, 3 wektory elementówcameraPosition to mnożenie macierzy 3x1 * 1x3, które jest macierzą .. 3x3. jak mogę to wykorzystać w opengl z prostymglTranslatef
iglRotate
połączenia?