Bootstrap

opencv中Core中的Norm函数解释

1. Norm的类型

NORM_L1: L1 范数(曼哈顿范数)。数组中所有元素绝对值之和。
NORM_L2: L2 范数(欧几里得范数)。数组中所有元素平方和的平方根。
NORM_INF:无穷范数(最大绝对值范数)。数组中所有元素绝对值的最大值。

2.计算单个数组中的Norm函数

单个数据就是计算标准的Norm函数,按照类型进行计算即可

double norm(InputArray src1, int normType = NORM_L2, InputArray mask = noArray());

参数解释
@param src1第一个输入数组。
@param normType规范类型(参见#NormTypes)。
@param mask可选操作掩码;它必须与src1类型具有相同的大小。
 示例

Mat mat = Mat(Size(1, 2), CV_8SC1);    
mat.at<int>(0, 0) = 2;
mat.at<int>(1, 0) = 6;
double d = norm(mat, NORM_L2);
cout << "计算结果:" << d<<endl;

返回结果:

3.计算两个数组的Norm函数

这个函数相当于计算两个数组的欧式距离,如果是点数组,就是点的距离。

double norm(InputArray src1, InputArray src2,
                         int normType = NORM_L2, InputArray mask = noArray());

参数解释:

@param src1第一个输入数组。
@param src2第二个输入数组的大小和类型相同的src1。
@param normType规范类型(参见#NormTypes)。
@param mask可选操作掩码;它必须与src1类型具有相同的大小。

Mat mat = Mat(Size(1, 2), CV_8SC1);    
mat.at<int>(0, 0) = 2;
mat.at<int>(1, 0) = 6;
double d = norm(mat, NORM_L2);
cout << "计算结果:" << d<<endl;
Mat mat2 = Mat(Size(1, 2), CV_8SC1);
mat2.at<int>(0, 0) = 1;
mat2.at<int>(1, 0) = 0;
double d2 = norm(mat2, NORM_L2);
cout<<"计算结果:" << d2<<endl;
double ds = norm(mat, mat2,NORM_L2);
cout << "计算结果:" <<ds<<endl;

运行结果:

就是按照每个点的距离求平方和,再平方根。sqrt((2-1)*(2-1)+(6-0)*(6-0))=6.08276。

;