Если у вас только одна камера, матрица проекции должна быть равна camera_matrix. Есть только одно осложнение.
cv2.triangulatePoints определен для работы с двумя вид с 2-х разных камер.
В документации также указано, что
Функция реконструирует трехмерные точки (в однородных координатах), используя их наблюдения со стереокамеры. Матрицы проекций можно получить с помощью stereoRectify().
Так что да, вам нужно откалибровать каждую камеру и откалибровать каждую пару камер, чтобы получить матрицу каждой камеры, матрицу вращения и вектор перевода с одной камеры на «основную камеру».
Для данной пары камер с матрицами камер К1 и К2 верно, что
Проекционная матрица основной камеры (камера является мировой системой отсчета)
P1 = K1*[I | z]
где I — единичная матрица, а z — вектор 0,0,0 в четвертом столбце. Вы могли подумать что-то вроде
1 0 0 0
0 1 0 0
0 0 1 0
Если R — матрица поворота между двумя камерами, а t — расстояние между двумя камерами, вторая матрица проекций равна
P2 = K2*[R | t]
В python, если вы не можете получить матрицы из StereoRectify, одним из способов сделать это вручную является
import numpy as np
P = np.concatenate((np.dot(K,R),np.dot(K,t)), axis = 1)
person
marcoresk
schedule
13.12.2016