OpenCV的normalize函数用于对数组(图像)进行归一化处理,即将数组中的元素缩放到一个指定的范围或具有一个特定的标准(如均值和标准差)。它有两个原型函数, 如下:
Normalize()规范化数组的范数或值范围。当normType=NORM_INF、NORM_L1或NORM_L2时,函数cv::normalize对输入数组元素进行归一化和移位,使得∥dst∥Lp=alpha(其中p=Inf、1或2);或者当normType=NORM_MINMAX时minIdst(I)=alpha,maxIdst(I)=beta(仅适用于密集数组)。可选掩码指定要标准化的子数组。这意味着在子数组上计算范数或 min-n-max,然后修改该子数组以进行归一化。如果您只想使用掩码来计算范数或最小值-最大值但修改整个数组,则可以使用范数和 Mat::convertTo。
函数参数:
src 输入数组(单通道或多通道)。
dst 输出数组,与输入数组有相同的形状和类型(或者根据dtype参数指定的类型)。
alpha在范围归一化的情况下,要归一化到的范数值或范围下限(normType=NORM_MINMAX时)。
beta 范围归一化情况下的范围上限(仅当NORM_MINMAX类型被使用时才需要);它不用于范数标准化。
normal_type 标准化类型,有以下几种:
dtype 当为负数时,输出数组与 src 具有相同的类型;否则,它具有与 src 相同的通道数和深度 =CV_MAT_DEPTH(dtype)。
mask 可选操作掩码。
这是一个重载成员函数,为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。
示例:
新建一个控制台应用程序Project,在源程序中添加如下代码:
// normalizeTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
vector<double> data = {1,2,3,4,10};
vector<double> ndata;
int length = data.size();
cout << "Data:" << endl;
for (int i = 0; i < length; i++)
{
cout << data[i] << " ";
}
cout << endl;
cout << endl;
//normal_type: NORM_INF
normalize(data, ndata, 1.0, 0, NORM_INF);
cout << "NORM_INF result:" << endl;
for (int i = 0; i < length; i++)
{
cout << ndata[i];
}
cout << endl;
cout << endl;
//normal_type: NORM_L1
normalize(data, ndata, 1.0, 0, NORM_L1);
cout << "NORM_L1 result:" << endl;
for (int i = 0; i < length; i++)
{
cout << ndata[i]<<" ";
}
cout << endl;
cout << endl;
//normal_type: NORM_L2
normalize(data, ndata, 1.0, 0, NORM_L2);
cout << "NORM_L2 result:" << endl;
for (int i = 0; i < length; i++)
{
cout << ndata[i]<<" ";
}
cout << endl;
cout << endl;
//normal_type: NORM_MINMAX 1
normalize(data, ndata, 1.0, 0, NORM_MINMAX);
cout << "NORM_MINMAX 1 result:" << endl;
for (int i = 0; i < length; i++)
{
cout << ndata[i] << " ";
}
cout << endl;
cout << endl;
//normal_type: NORM_MINMAX 1
normalize(data, ndata, 0, 255, NORM_MINMAX);
cout << "NORM_MINMAX 2 result:" << endl;
for (int i = 0; i < length; i++)
{
cout << ndata[i] << " ";
}
return 0;
}
试运行,结果如下: