Я использую функцию triagulatePoints в opencv. Наконец, у меня есть работа, после долгого отчаяния, но результаты не выглядят правильно. Я прочитал некоторые другие вопросы по этому поводу, но я до сих пор этого не понимаю!opencv triangulatePoints, странный результат
Я бегу:
cv::Mat Q,P1,P2,LP,RP,D1,D2,M1,M2;
char *CALIB_FILE = (char *)"extrinsics.xml";
FileStorage fs(CALIB_FILE, FileStorage::READ);
fs["Q"] >> Q;
fs["P1"] >> P1;
fs["P2"] >> P2;
cv::Mat cam0pnts(1, 5, CV_64FC2); //681 432 479 419 550 320 682 274 495 254
cv::Mat cam1pnts(1, 5, CV_64FC2); //800 466 587 451 657 352 791 311 592 283
cv::Mat points_3D(1, 5, CV_64FC4);
cv::triangulatePoints(P1, P2, cam0pnts, cam1pnts, points_3D);
P1 и P2 рассчитанные extrinsics из функции stereo_calib.
Есть 5 баллов, грубый квадрат с точкой в каждом углу и один посередине.
В результате Матрица:
[-0.6620691274599629, 0.6497615623177577, -0.6585234150236594, 0.6529909432980171, -0.6604373884239706;
-0.7091492226203088, 0.7208075295879011, -0.7119285643550911, 0.7174438199266364, -0.710244308941275;
0.242429054072024, -0.2413429417514131, 0.2439357048056051, -0.2426462227979475, 0.2436708320163396;
-6.52928664505207e-005, -4.348043360405063e-005, -5.515313727475824e-005, -6.149577656504346e-005, -5.668087253108842e-005]
Который, при построении графика в 3d, дает две позиции, которые выглядят почти правильно, если полностью масштабируются неправильно, то три дубликата этих двух.
В каком месте я ошибаюсь? Я должен что-то сделать с полученной матрицей, чтобы получить координату xyz? Или я неправильно выполнил эту функцию?
Что вы использовали для EPSILON? – oarfish