Ich muss mehrere Abstände zwischen Punkten gegen eine Distanzschwelle prüfen. Was ich tun kann ist, das Quadrat meiner Schwelle zu nehmen und es mit der quadrierten Norm von (a-b)
zu vergleichen, wobei a
und b
die Punkte sind, die ich überprüfe.
Ich weiß von cv::norm
Funktion, aber ich frage mich, ob es eine gibt Version, die nicht die Quadratwurzel berechnet (und ist daher schneller) oder wenn ich es manuell implementieren sollte.
Hinweis von OP :
Ich habe diese Antwort akzeptiert Wie es die beste Methode ist, die man mit OpenCV,
erreichen kann, aber ich denke, dass die beste Lösung in diesem Fall für eine benutzerdefinierte Funktion geht.
Ja, es ist NORM_L2SQR
:
Sie können in der Funktion cv::norm
in stat.cpp
sehen, dass wenn Sie NORM_L2SQR
verwenden, berechnen Sie nicht sqrt
in der Norm:
Zum spezifischen Thema:
Mein eigentliches Problem ist: Ich habe einen Vektor von Punkten, verschmelze Punkte näher als eine gegebene Entfernung. "Zusammenführen" bedeutet, dass Sie eine entfernen und die andere Hälfte in Richtung des gerade entfernten Punkts verschieben.
Sie können wahrscheinlich
true
if zurückgibt Zwei Punkte liegen innerhalb einer bestimmten Schwelle. Hier der Code:
%Vor%erzeugt die zwei Zentren:
%Vor%Es scheint, dass es keine besonderen Probleme gibt, um dieses Problem anzugehen.
Ich dachte, dass eine Lösung die Methode ddot
(Punktprodukt) verwenden und etwas wie
Wenn man bereit ist, das Risiko einzugehen, gibt es cv::normL2Sqr
, was erfordert, dass die Eingabe im Array-Format erfolgt: cv::Point
könnte direkt in int[]
konvertierbar sein.
Ich werde persönlich weitermachen, indem ich meine eigene quadrierte Norm schreibe.