- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
测试代码很简单:
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
cv::Point2f a(0.f, 1.f);
cv::Point2f b(3.f, 5.f);
std::cout << cv::norm(a - b)<< std::endl;
return 0;
}
它工作正常。但是如果我换行
std::cout << cv::norm(a - b)<< std::endl;
至 std::cout << cv::norm(a, b)<< std::endl;
或 std::cout << cv::norm(a - b, cv::NORM_L2)<< std::endl;
发生错误,它告诉我无法匹配这样的功能。
我不明白为什么Point2f
类型无法转换,因为唯一的输入参数 a-b
运作良好。
给定的opencv范数函数here .
最佳答案
请注意,sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) )
与 sqrt( ( a - b).x * (a - b).x + (a - b).y * (a - b).y )
,所以你可以调用 cv::norm(a - b)
。
然而,根据这个(尽管是旧的)link,单点对的性能很差。
我刚刚在我的机器上运行了 test code。它生成 15,000 个点并计算每个点到其余点的距离。
a : [0, 0] - b : [2.14748e+09, 2.14748e+09]
euclideanDist : 3.037e+09
distanceBtwPoints : 3.037e+09
cv::norm : 3.037e+09
max_distance euclideanDist : 3.02456e+09 time passed :0.165179
max_distance distanceBtwPoints : 3.02456e+09 time passed :0.259471
max_distance cv::norm : 3.02456e+09 time passed :0.26728
令人惊讶。最快的代码是
float euclideanDist(cv::Point2f& a, cv::Point2f& b)
{
cv::Point2f diff = a - b;
return cv::sqrt(diff.x*diff.x + diff.y*diff.y);
}
使用 cv::norm(a - b)
和下面的代码几乎相同:
static double distanceBtwPoints(const cv::Point2f &a, const cv::Point2f &b)
{
double xDiff = a.x - b.x;
double yDiff = a.y - b.y;
return std::sqrt((xDiff * xDiff) + (yDiff * yDiff));
}
但这显然是因为转换为 double
。如果保留为 float
,distanceBtwPoints
与 eucledianDist
一样快。
关于c++ - 使用opencv范数函数获取两点的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38365900/
与在 SVM 的相同成本函数中使用 2-范数权重相比,我们如何通过在成本函数中使用 1-范数权重来提高稀疏性。 对于 1-范数:成本函数 - 最小化 ||w||_1 对于 2-范数:成本函数 - 最小
我有几个与 l1 规范相关的问题。和TV(Total Variation)一样吗?如何在matlab中计算图像的L1范数?我确实阅读了电视的 wiki 页面,但它对我来说太复杂了。 最佳答案 L1范数
我想最小化实现一组给定的非负整数值 b 的成本,这些非负整数值 b 是从 GEKKO 中的两组非负整数变量 x、y 线性计算出来的。 如果以某种方式说明了我的问题,则 b 是 x 和 y 的约束。我的
我有一个 TensorFlow 占位符,它有 4 个维度,代表一批图像。每个图像为 32 x 32 像素,每个像素有 3 个颜色 channel 。第一个维度表示图像的数量。 X = tf.place
我想取变量列表的 2-范数。如何将序列转换为 CVXPY 兼容的变量“列表”?有办法处理这个问题吗?提前致谢。例如, test_a=cvxpy.Variable(1) test_b=c
我想知道 Python 中是否有一个函数可以完成与 scipy.linalg.lstsq 相同的工作,但使用“最小绝对偏差”回归而不是“最小二乘”回归 (OLS)。我想使用 L1 规范,而不是 L2
如何在 Python 中计算两个向量的差的 1-范数 ||a - b||_1 = sum(|a_i - b_i|)? a = [1,2,3,4] b = [2,3,4,5] ||a - b||_1
我有一个矢量 e <- c(0.1, -0.1, 0.1)我想计算 L1 和 L2 范数。我正在使用 norm(e, type="2")这适用于 L2 规范,但当我将其更改为 norm(e, type
我正在尝试将 Boost.Units 与 Eigen 3.3.1 一起使用,但在遵循说明后 here , 和一些信息 found around ,我仍然不知道如何使 norm() 工作。 这是我到目前
在 Eigen 库中,我知道有 visitors 和 reductions 用于密集的 Eigen::Matrix 类,我可以有效地使用它们来计算他们的 1-norm, inf-norm, etc.
我有一个矩阵 X,它在 d 维空间中有 n 列数据 vector 。给定一个 vector xj,v[j]是它的l1范数(所有abs(xji)的总和), w[j] 是它的 l2 范数的平方(所有 xj
我是一名优秀的程序员,十分优秀!