OpenCV为cv :: Point2d求平方

时间:2016-12-27 21:39:54

标签: c++ opencv

我尝试使用平方的欧几里德范数cv::NORM_L2SQR而没有生根,如图所示

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);
}

1 个答案:

答案 0 :(得分:0)

必须显式构造一个InputArray容器(例如矩阵)才能正确编译非默认参数:

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

虽然创建容器对象的成本可能比仅仅计算标准要慢。

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

也许将Point2d转换为std :: complex并使用std :: norm()更周到。

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