OPENCV版本:3.4.2
VS版本:2017
void cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_type=NORM_L2,int dtype=-1,InputArray mark=noArry())
函数作用:
归一化数据。该函数分为范围归一化与数据值归一化。(Normalizes the norm or value range of an array.)其实范围归一化和数值归一化可以归为一类,一般来说数值归一化是指将数值归一到[0,1]区间上,而范围归一化则指将数值归一到[a,b]上,a,b为任意值。由此看出,数值归一化是范围归一化的特例,包含在范围归一化中。
参数说明:
src 输入数组;
dst 输出数组,数组的大小和原数组一致;
alpha 用来规范值或者规范范围,并且是下限;
beta 只用来规范范围并且是上限,因此只在NORM_MINMAX中起作用;
norm_type 归一化选择的数学公式类型;
dtype 当为负,输出在大小深度通道数都等于输入,当为正,输出只在深度与输如不同,不同 的地方由dtype决定;
mark 掩码。选择感兴趣区域,选定后只能对该区域进行操作。
设数组中元素为{A1,A2,A3…An}
NORM_MINMAX:(AK不属于{max(Ai)},min(Ai),当AK等于max(Ai)时p=1,等于min(Ai)时p=0)
src={10,23,71},默认alpha=1,beta=0:
NORM_L1运算后得到 dst={0.096,0.221,0.683}
NORM_INF运算后得到 dst={0.141,0.324,1}
NORM_L2运算后得到 dst={0.133,0.307,0.947}
NORM_MINMAX运算得到 dst={0,0.377,1}
1.NORM_L1、NORM_INF、NORM_L2模式下归一化结果与beta无关,只与alpha有关,详见第4部分的公式说明;
2.NORM_MINMAX中alpha、beta都起作用,同时需要注意的是alpha和beta的取值顺序与归一化结果无关。即alpha=255,beta=0和alpha=0,beta=255最后的归一化结果是相同的。
NORM_L1运算:
#include
#include
using namespace std;
using namespace cv;
int main()
{
vectora = { 10,11,234,45,65,456,0 };
normalize(a, a,1,255,NORM_L1);
//normalize(a, a,1,0,NORM_L1);结果相同
for (int i = 0; i < a.size(); i++)
{
cout << a[i] << endl;
}
waitKey(0);
return 0;
}
#include
#include
using namespace std;
using namespace cv;
int main()
{
vectora = { 10,11,234,45,65,456,0 };
normalize(a, a,-1,255,NORM_MINMAX);
//normalize(a, a,255,-1,NORM_MINMAX);结果相同
for (int i = 0; i < a.size(); i++)
{
cout << a[i] << endl;
}
waitKey(0);
return 0;
}
normalize()中alpha默认为1,beta默认为0,而在参数解释中alpha解释为下限,beta解释为上限,很多同学在这个地方产生了疑问?一个数组的下限不是应该小于上限吗?即alpha
这里给出我自己的解释,有错误的地方请大家指出:由上述实验知道,
在norm_type=NORM_MINMAX下:
alpha与beta的大小关系其实并不重要,alpha,beta只是确定范围的两个边界值,其确定的范围可以表示为:
[min(alpha,beta), max(alpha,beta)]
在norm_type=NORM_L1\INF\L2下:
beta取任何值都对归一化结果没有影响
因此,我得出的结论是,在3.参数说明中,应该将alpha解释成:用来规范值或者规范范围,在规范范围是为范围的一边界值; 将beta解释成:只用来规范范围,为范围的另一边界值。
注:本文在博主:cosmispower的一篇文章的基础上做了相应的个人修改补充,感谢博主的贡献。
参考博主的博客链接:https://blog.csdn.net/cosmispower/article/details/64457406