opencv函数介绍—normalize

1.函数原型

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

2.函数作用
归一化数据。该函数分为范围归一化与数据值归一化。(Normalizes the norm or value range of an array.)

3.参数说明
src 输入数组;
dst 输出数组,数组的大小和原数组一致;
alpha 1,用来规范值,2.规范范围,并且是下限;
beta 只用来规范范围并且是上限;
norm_type 归一化选择的数学公式类型;
dtype 当为负,输出在大小深度通道数都等于输入,当为正,输出只在深度与输如不同,不同的地方游dtype决定;
mark 掩码。选择感兴趣区域,选定后只能对该区域进行操作。

4.归一化选择的数学公式类型介绍(norm_type)
设数组中原有{A1,A2,A3...An}
NORM_L1:


NORM_INF:

NORM_L2:

NORM_MINMAX:(AK不属于{max(Ai)},min(Ai),当AK等于max(Ai)时p=1,等于min(Ai)时p=0)


5.举例说明:
src={10,23,71}

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}



6.范围归一化与值归一化的区别
区别一:范围归一化使用的是如下式子,设范围为【0,255】

即把src缩放到【0,255】这个范围内,并不使用上面的4个公式去解。

区别二:使用范围归一化时,beta必有值不等于0

举例说明:
一 值归一化:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;

int main()
{
vector<double>a={ 10,11,234,45,65,456,0 };
cv::normalize(a, a, 1,0, cv::NORM_MINMAX);
for (int i=0;i < a.size();i++)
{
cout << a[i] << endl;
}
return 0;
}
结果如下:


二 范围归一化
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;

int main()
{
vector<double>a={ 10,11,234,45,65,456,0 };
cv::normalize(a, a, 0,255, cv::NORM_MINMAX);
for (int i=0;i < a.size();i++)
{
cout << a[i] << endl;
}
return 0;
}
结果如下:




### 回答1: OpenCV中的normalize函数可以对输入的图像或数组进行归一化操作。具体而言,该函数可以将数组中的数值缩放到指定的范围内,以便于后续的处理或显示。 该函数的定义如下: ``` void normalize(InputArray src, OutputArray dst, double alpha = 1, double beta = 0, int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray()); ``` 其中,参数的含义如下: - src: 输入的图像或数组。 - dst: 输出的归一化结果。 - alpha: 归一化的范围最小值,通常为0。 - beta: 归一化的范围最大值,通常为255。 - norm_type: 归一化类型,可以是NORM_INF、NORM_L1或NORM_L2。 - dtype: 输出数组的数据类型,如果为-1,则与输入数组保持一致。 - mask: 可选的掩码数组,用于指定哪些元素需要进行归一化。 使用该函数可以实现将图像灰度值范围归一化到0~255之间,以便于显示或进行其他处理。 ### 回答2: OpenCVnormalize函数是一个非常常用的函数,它可以帮助我们将图像像素值归一化到指定的范围内,使得图像的亮度更加均衡,更利于后续的图像处理。 该函数的原型如下: void normalize(InputArray src, OutputArray dst, double alpha = 1.0, double beta = 0.0, int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray()); 其中,src表示输入图像,dst表示输出图像,alpha和beta分别为乘数和加数,norm_type表示规范化类型,dtype表示输出图像的数据类型,mask表示掩膜。 normalize函数的使用方法如下: Mat img = imread("test.jpg"); Mat dst; normalize(img, dst, 0, 255, NORM_MINMAX, CV_8UC1); 这里,我们将输入图像img像素值归一化到0-255之间,并将输出图像的数据类型设置为CV_8UC1,即8位无符号整数。 normalize函数中的norm_type参数有几种取值,分别代表以下含义: NORM_INF: 求矩阵的最大值,也就是说把矩阵绝对值中的最大值作为归一化参考。 NORM_L1: 求出矩阵中所有元素的绝对值之和,作为归一化参考。 NORM_L2: 求出矩阵中所有元素的平方和,作为归一化参考。 NORM_MINMAX: 将矩阵中最小值变为alpha,最大值变为beta。 normalize函数能够有效地增强图像的对比度和亮度,尤其是在图像处理领域中常常使用。 需要注意的是,normalize函数并不修改输入图像,而是生成一个新的输出图像。因此,在使用该函数时需要注意需要将生成的新图像作为最终的结果进行进一步的处理。同时,使用该函数时需要注意数据类型和规范化类型的选择,以避免在图像处理过程中出现一些不必要的问题。 ### 回答3: OpenCV中的normalize函数是一个用于归一化数据的函数,它可以帮助将输入数据按照一定的规则转化到指定的范围内。 normalize函数的原型如下: void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray()); 这个函数有几个参数要解释一下: 1. src:输入数组,可以是矩阵、向量或者图像。它必须是单通道或者多通道的浮点类型。 2. dst:输出的数组,必须和输入数组的大小、通道数和通道类型都相同。它必须为单通道或者多通道的浮点类型。 3. alpha:归一化因子,即输出数组的范围的缩放因子。如果输入数组的最小值和最大值都是已知的,那么可以计算出该因子。 4. beta:归一化偏移量,即输出数组的范围的偏移量。如果输入数组的最小值和最大值都是已知的,那么可以计算出该偏移量。 5. norm_type:归一化类型,指定归一化的方法,可以是以下值之一: - NORM_INF:求输入数组的L∞范数。 - NORM_L1:求输入数组的L1范数。 - NORM_L2:求输入数组的L2范数。 - NORM_MINMAX:将输入数组归一化到指定的范围内。 6. dtype:输出数组的类型,如果设置为负数,则输出数组就和输入数组的类型相同。 7. mask:掩模,用来指定哪些数组元素需要进行归一化处理。 在使用normalize函数的时候,我们需要注意以下几个事项: 1. 输入和输出数组必须有相同的大小和通道数。 2. 输入数组必须为单通道或者多通道的浮点数类型。 3. 在计算归一化因子alpha和beta时,如果输入数组的最小值和最大值不是已知的,则需要手动指定。 4. 归一化类型norm_type可以选择不同的方法,但是如果选择了NORM_MINMAX,则需要指定输出数组的范围。 5. 如果需要对指定的元素进行归一化处理,则需要传入掩模参数mask。 总而言之,normalize函数是一个非常实用和重要的OpenCV函数,可以帮助我们将输入数据转化到指定的范围内,对于图像处理和计算机视觉任务有着广泛的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值