gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:13:09 26 4
gpt4 key购买 nike

我尝试使用平方欧氏范数 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com