Использование OpenCV для определения положения камеры из точек с известными координатами - PullRequest
0 голосов
/ 08 июля 2020

Этот вопрос похож на на этот , но я не могу найти, что не так в моем. Я пытаюсь использовать calibrateCamera камеры openCV, чтобы найти местоположение камеры, которая в этом случае находится в самолете, используя известные положения углов взлетно-посадочной полосы:

import cv2
objectPoints=np.array([[posA,posB,posC,posD]], dtype='float32')
imagePoints=np.array([[R0,R1,L1,L0]],dtype='float32')
imageSize=(1152,864)
retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2.calibrateCamera(objectPoints, imagePoints, imageSize, None, None)

#rotation matrix
R_mtx, jac = cv2.Rodrigues(np.array(rvecs).T)

cameraPosition = -np.matrix(R_mtx).T * np.matrix(tvecs[0])

cameraPosition

Где [R0, R1, L1, L0 ] - это положение углов в пикселях на изображении, а [posA, posB, pos C, posD] - положение взлетно-посадочной полосы в реальном мире. Я получаю в качестве ответа на этот код:

matrix([[ -4.7495336 ], #x
        [936.21932548], #y
        [-40.56147483]]) #z

Когда я должен получить что-то вроде:

#[x,y,z]
[-148.4259877253941, -1688.345610364497, 86.58536585365854]
...