2016-12-27 3 views
3

Ich versuche euklidische Norm im Quadrat verwenden cv::NORM_L2SQR ohne Verwurzelung, wie hier gezeigtOpenCV squared Norm für cv :: Point2D

Does OpenCV offer a squared norm function for cv::Point?

Rechenressourcen zu sparen. Während also der folgende Code funktioniert:

// works fine 
cv::Point2d a(1.5, 3); 
cv::Point2d b(5.1, 6); 
//Euclidean distance 
//http://answers.opencv.org/question/14188 
double res = cv::norm(a-b); 

Die folgende nicht:

double res = cv::norm(a-b,cv::NORM_L2SQR); 

(error: no matching function for call to norm(cv::Point_<double>, cv::NormTypes))

Was kann ich in OpenCV 3.1 optimierte Lösung zu verwenden?

EDIT: Ich verwende benutzerdefinierte Funktion zur Zeit und hoffen, dass Compiler optimiert es irgendwie:

double euclideanDist(cv::Point2d& p, cv::Point2d& q) { 
    cv::Point2d diff = p - q; 
    return (diff.x*diff.x + diff.y*diff.y); 
} 
+0

Es scheint, dass nur Point2f akzeptiert werden (Point_ ). Ich sollte überprüfen, obwohl – Miki

+0

@Miki Nope, bekomme ich "' keine passende Funktion "" sogar für Point2f – Slowpoke

+2

Ich denke, Sie übertreiben es, Es scheint keine große Leistungsverbesserungen, etc. zu mir für die Verwendung von OpenCV-Implementierung anstelle von einem einfachen C++ Inline-Definition einer einfachen EqDist-Methode, Sie können die Kommentare lesen: http://answers.opencv.org/question/14188/calc-eucliadian-distance-between-two-single-point/?answer=14190#post-id -14190, um meine Annahmen zu überprüfen – ZdaR

Antwort

0

Haben Sie einen InputArray Behälter (zB Matrix), um explizit zu konstruieren richtig für Nicht-Standard zu kompilieren Parameter:

double res = cv::norm(cv::Mat(a0 - b0), cv::NORM_L2SQR);

Obwohl Kosten könnten ein Containerobjekt zu schaffen, langsamer sein als nur die Norm zu berechnen.

cv::norm(std::vector<cv::Point2d>(1, a0 - b0), cv::NORM_L2SQR);

Vielleicht Point2D Umwandlung der std :: Norm std :: komplex und mit() ist nachdenklicher.

cv::Point2d diff = a0 - b0; 
std::norm(std::complex<double>(diff.x, diff.y)); 
Verwandte Themen