2016-04-22 2 views
-1

Я могу рассчитать калибровку камеры с помощью OpenCV в Python. Однако мне действительно нужна проекционная матрица. Рассматривая уравнения из документов, это выглядит так: P = K[R|T] где K - внутренняя матрица, R - матрица вращения, а T - вектор сдвига. Это код, который я сделал для вычисления матрицы проецирования:OpenCV: Как найти матрицу проекции из calibrateCamera() output?

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) 

Это правильно? Насколько я понимаю, я должен проверить это, выполнив P * [x; у; г; 1], где (x, y, z) - точка мира, а выход должен быть соответствующей координатой пикселя. Я пробовал это, но результаты выглядят очень неправильно. Означает ли это, что это была плохая калибровка, или я неправильно построил P?

ответ

-1

Я думаю, что я исправил его - как оказалось, я дал некоторые плохие параметры для калибровки камеры(). Я переписал код в основном на основе calibrate.py, который поставляется с папкой образцов OpenCV. Я следил за остальными понятиями, которые я упомянул в своем первоначальном сообщении (построение P, проверка ошибки повторного воспроизведения и т. Д.), И теперь это дает мне гораздо более разумные результаты.