opencv normL2 函数源码
时间: 2023-08-02 21:07:23 浏览: 39
以下是 OpenCV 中 `normL2` 函数的源代码:
```cpp
double normL2(InputArray src, InputArray mask)
{
if (src.depth() == CV_64F)
{
return normL2_<double>(src, mask);
}
else
{
return normL2_<float>(src, mask);
}
}
template<typename T>
static double normL2_(InputArray _src, InputArray _mask)
{
const int N = (int)_src.total(), cn = _src.channels();
const T* src = _src.getMat().ptr<T>();
const uchar* mask = _mask.empty() ? 0 : _mask.getMat().ptr();
double result = 0;
if (mask)
{
for (int i = 0; i < N; i++, src += cn)
if (mask[i])
for (int j = 0; j < cn; j++)
{
T v = src[j];
result += v * v;
}
}
else
{
for (int i = 0; i < N*cn; i++)
{
T v = src[i];
result += v * v;
}
}
return std::sqrt(result);
}
```
`normL2` 函数用于计算输入数组的 L2 范数。如果输入数组的元素类型为 `CV_64F`,则调用 `normL2_<double>` 函数;否则调用 `normL2_<float>` 函数。
`normL2_` 函数实现了 L2 范数的计算。它首先获取输入数组的指针和掩码(如果有指定),然后计算输入数组的 L2 范数。如果指定了掩码,则只考虑掩码中为非零的像素。
该函数的返回值为一个 `double` 类型的数值,代表输入数组的 L2 范数。