c++ - cv::Point2d 的 OpenCV 平方范数

标签 c++ opencv

我尝试使用平方欧氏范数 cv::NORM_L2SQR没有 Root ,如图所示

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

最佳答案

必须显式构造一个 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 ) );

关于c++ - cv::Point2d 的 OpenCV 平方范数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41352530/

相关文章:

c++ - 将数学表达式传递给函数

c++ - 使用类继承和 malloc(在 arduino 上)

c++ - 请解释我的结构定义中的冒号?

linux - 在 ubuntu 14.04 上安装 opencv 时出错

python - 将图像插入基材

linux - CMAKE opencv 更改构建文件夹

c++ - 为什么共享库可以定位为一个用户,而不是另一个?

c++ - 数据对齐的差异

python - 如何使用python和openCV从.yuv视频文件(YUV420)中提取帧?

c++ - C++ 中图像序列的全局运动估计