Я пытаюсь вычислить Sampson distance
, расстояние от точки до соответствующей эпиполярной линии, которую я буду использовать в качестве показателя ошибки позже. Я использую opencv 3.1
, c++
и windows-10 visual studio 14
.Sampson Distance using opencv, C++
Но функция sampsonDistance разбивает код:
Point3f point1 = Point3f(keypoints_1[good_matches[iP].queryIdx].pt.x, keypoints_1[good_matches[iP].queryIdx].pt.y, 1.0);
Point3f point2 = Point3f(keypoints_2[good_matches[iP].trainIdx].pt.x, keypoints_2[good_matches[iP].trainIdx].pt.y, 1.0);
Mat pt1(point1);
Mat pt2(point2);
double sampsonD = sampsonDistance(pt1, pt2, Flist[iF])
Я получаю сообщение об ошибке:
OpenCV Error: Assertion failed (_pt1.type() == CV_64F && _pt1.type() == CV_64F && _F.type() == CV_64F) in cv::sampsonDistance, file D:\opencv\sources\modules\calib3d\src\fundam.cpp, line 1043
Документация говорит:
double cv::sampsonDistance (InputArray pt1,
InputArray pt2,
InputArray F
)
Как использовать эту функцию, Я действительно не понимаю использование входного массива, в приведенном выше я конвертирую 3d-точку в то, что я lieve - двумерные однородные координаты, хранящиеся как cv :: Mat. Фундаментальная матрица хранится в формате 3x3 cv :: Mat.
Спасибо, что казалось, чтобы исправить это. – SKA