Ich versuche, Sampson distance
, die Entfernung von einem Punkt zu seiner entsprechenden Epipolarlinie zu berechnen, die ich später als eine Fehlermetrik verwenden werde. Ich verwende opencv 3.1
, c++
und windows-10 visual studio 14
.Sampson Entfernung mit opencv, C++
Aber die Funktion sampsonDistance stürzt den Code:
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])
ich die Fehlermeldung:
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
Die Dokumentation sagt:
double cv::sampsonDistance (InputArray pt1,
InputArray pt2,
InputArray F
)
Wie ich diese Funktion nicht verwenden, Ich verstehe die Verwendung des Input-Arrays nicht wirklich, im obigen konvertiere ich einen 3D-Punkt in das, was ich bin Lieve ist 2D homogene Koordinaten als cv :: Mat gespeichert. Die Grundmatrix wird bei 3x3 cv :: Mat gespeichert.
Dank, die es zu beheben schien. – SKA