私はここに示すように、ルートを取ることなく乗ユークリッドノルムcv::NORM_L2SQR
を使用しようとOpenCVのは、CVのためのノルムを二乗:: Point2Dの
をDoes OpenCV offer a squared norm function for cv::Point?
を計算リソースを節約するために。次のコードは動作しますがそう:
// 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);
次にはない:
double res = cv::norm(a-b,cv::NORM_L2SQR);
(error: no matching function for call to norm(cv::Point_<double>, cv::NormTypes)
)
は私が最適化されたソリューションを使用するようにOpenCVの3.1で何ができますか?
編集:私は、現時点でカスタム関数を使用し、コンパイラが何とかそれを最適化することを期待しています:
double euclideanDist(cv::Point2d& p, cv::Point2d& q) {
cv::Point2d diff = p - q;
return (diff.x*diff.x + diff.y*diff.y);
}
Point2fのみが受け入れられるようです(Point_)。 –
Miki
@Miki Nope、Point2fの場合でも "No matching function'を得た – Slowpoke
私はあなたに過大な負荷がかかっていると思いますが、単純なC++の代わりにOpenCVの実装を使用すると大きなパフォーマンスの向上は見られません単純なEqDistメソッドのインライン定義、あなたはコメントを読むことができる:http://answers.opencv.org/question/14188/calc-eucliadian-distance-between-two-single-point/?answer=14190#post-id -14190私の前提を確認する – ZdaR