【OpenCV4】使用 normalize() 进行归一化(c++)

函数原型:


void cv::normalize	(	InputArray 	src,
						InputOutputArray 	dst,
						double 	alpha = 1,
						double 	beta = 0,
						int 	norm_type = NORM_L2,
						int 	dtype = -1,
						InputArray 	mask = noArray() 
						)	

解析:

  • src:输入
  • dst:输出
  • alpha:归一化目标值(范围归一化中的下边界)
  • beta:(范围归一化中的上边界),其他情况无效
  • norm_type:归一化方法
  • dtype:当为负数的时候,输出数据类型和输入一致;否则输出的通道数和输入一致,输出的数据类型和这里设置的一致
  • mask:掩膜

官方示例:

vector<double> positiveData = { 2.0, 8.0, 10.0 };
vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax;
// Norm to probability (total count) 求相对总数的概率
// sum(numbers) = 20.0
// 2.0      0.1     (2.0/20.0)
// 8.0      0.4     (8.0/20.0)
// 10.0     0.5     (10.0/20.0)
// 概率和为 1,即 0.1+0.4+0.5=1
normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1);
// Norm to unit vector: ||positiveData|| = 1.0
// 2.0      0.15
// 8.0      0.62
// 10.0     0.77
// 归一化后的平方和为 1,即 0.15^2+0.62^2+0.77^2=1
normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2);
// Norm to max element 除以最大值
// 2.0      0.2     (2.0/10.0)
// 8.0      0.8     (8.0/10.0)
// 10.0     1.0     (10.0/10.0)
normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF);
// Norm to range [0.0;1.0] 减去最小值,再除以(最大值-最小值)
// 2.0      0.0     (shift to left border)
// 8.0      0.75    (6.0/8.0)
// 10.0     1.0     (shift to right border)
normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);

你可能感兴趣的:(计算机视觉,opencv)