opencv norm 函数源码
时间: 2023-12-19 22:05:05 浏览: 55
opencv源码
5星 · 资源好评率100%
以下是 OpenCV 中 `norm` 函数的源代码:
```cpp
double norm(InputArray src1, int normType, InputArray mask)
{
return norm(src1, noArray(), normType, mask);
}
double norm(InputArray src1, InputArray src2, int normType, InputArray mask)
{
CV_INSTRUMENT_REGION()
if (src1.empty() || (src2.needed() && src2.empty()))
return 0;
if (mask.needed() && mask.empty())
CV_Error(Error::StsBadMask, "The mask can't be empty");
normType &= NORM_TYPE_MASK;
bool isRelative = (normType & NORM_RELATIVE) != 0;
bool isDiff = (normType & NORM_DIFF) != 0;
normType &= 7;
if (isDiff && src2.empty())
CV_Error(Error::StsBadArg, "src2 is empty in case of NORM_DIFF norm type");
CV_Assert(mask.empty() || mask.type() == CV_8U);
int depth1 = src1.depth(), depth2 = src2.depth();
int cn1 = src1.channels(), cn2 = src2.channels();
int type1 = src1.type(), type2 = src2.type();
if (depth1 == CV_32F || depth1 == CV_64F)
{
if (normType == NORM_INF)
return normInf(src1, mask);
if (normType == NORM_L1)
return normL1(src1, mask);
if (normType == NORM_L2SQR)
return normL2Sqr(src1, mask);
if (normType == NORM_L2 || normType == NORM_HAMMING || normType == NORM_HAMMING2)
return normL2(src1, mask);
if (normType == NORM_RELATIVE_L2SQR)
return normRelativeL2Sqr(src1, src2, mask);
if (normType == NORM_MINMAX)
return normMinMax(src1, mask);
}
if (normType == NORM_INF)
return normInf(src1, mask);
if (normType == NORM_L1)
return normL1(src1, mask);
if (normType == NORM_L2SQR)
return normL2Sqr(src1, mask);
if (normType == NORM_L2 || normType == NORM_HAMMING || normType == NORM_HAMMING2)
return normL2(src1, mask);
if (normType == NORM_DIFF && depth1 == depth2 && cn1 == cn2)
return normDiff(src1, src2, mask);
if (normType == NORM_RELATIVE_L2SQR)
return normRelativeL2Sqr(src1, src2, mask);
if (normType == NORM_MINMAX)
return normMinMax(src1, mask);
CV_Error(Error::StsBadFlag, "");
return 0;
}
```
该函数根据 `normType` 参数的值来计算输入数组的范数。有多种不同的范数类型,例如 L1 范数,L2 范数,无穷范数等。
如果有第二个输入数组 `src2`,则 `norm` 函数将计算两个数组之间的范数。如果 `mask` 参数被指定,则只考虑掩码中为非零的像素。
该函数的返回值为一个 `double` 类型的数值,代表输入数组的范数。
阅读全文