Этот вопрос похож на на этот , но я не могу найти, что не так в моем. Я пытаюсь использовать 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]