double norm(InputArray src1, InputArray src2, int normType = NORM_L2);
norm()
是 OpenCV 中的函数,用于计算两个矩阵之间的差异或误差。
其中:
src1
和src2
是输入矩阵,可以是cv::Mat
、cv::Mat_<T>
或std::vector<T>
类型的对象。normType
是一个可选参数,用于指定计算误差的类型。常见的取值为NORM_L1
、NORM_L2
和NORM_INF
,分别表示计算 L1 范数、L2 范数和无穷范数。默认值为NORM_L2
。
在你提供的代码中,points_reproj_Mat
和 detect_points_Mat
是两个 cv::Mat
对象,它们分别存储了角点的像素坐标。通过调用 norm()
函数并将这两个矩阵作为参数传递,可以计算它们之间的误差。
具体而言,norm(points_reproj_Mat, detect_points_Mat, NormTypes::NORM_L2)
将计算 points_reproj_Mat
和 detect_points_Mat
之间的 L2 范数误差。这意味着它将计算两个矩阵中对应元素之间的差值,并对差值取平方后求和,最后取平方根。
计算的结果将赋值给变量 err
,它是一个 double
类型的变量,用于存储误差值。您可以使用该值进行后续的处理或分析。
double norm(InputArray src, int normType = NORM_L2, InputArray mask = noArray());
其中:
src
是输入的数组,可以是cv::Mat
或cv::Mat_<T>
类型的对象。它可以是一维或多维数组。normType
是一个可选参数,用于指定计算范数的类型。常见的取值为NORM_L1
、NORM_L2
、NORM_INF
,分别表示计算 L1 范数、L2 范数和无穷范数。默认值为NORM_L2
。mask
是一个可选的掩码数组,用于指定哪些元素应该包含在范数计算中。它必须与src
的尺寸相同,且类型为CV_8UC1
或CV_8SC1
。
cv::norm
函数根据指定的范数类型计算输入数组的范数,并返回一个 double
类型的值作为结果。
以下是对不同范数类型的解释:
NORM_L1
:计算 L1 范数,也称为曼哈顿范数。对于一维数组,它表示数组中所有元素的绝对值之和。对于多维数组,它表示所有元素绝对值之和的最大值。NORM_L2
:计算 L2 范数,也称为欧几里得范数。对于一维数组,它表示数组中所有元素的平方和的平方根。对于多维数组,它表示所有元素平方和的平方根。NORM_INF
:计算无穷范数,也称为最大绝对值范数。对于一维数组,它表示数组中绝对值最大的元素的绝对值。对于多维数组,它表示所有元素绝对值的最大值。