【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);
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ OpenCV中的直方图归一化是一种常用的图像处理技术,用于将图像的直方图进行标准化处理,使得直方图的值范围在0到1之间。这样可以消除不同图像之间的亮度差异,使得它们具有更好的可比性。 在OpenCV中,可以使用normalize函数来实现直方图归一化。该函数的原型如下: ```cpp void normalize(InputArray src, OutputArray dst, double alpha = 0, double beta = 1, int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray()); ``` 其中,src是输入的直方图,dst是输出的归一化后的直方图。alpha和beta是归一化的范围,通常设置为0和255,表示将直方图的值范围映射到0到255之间。norm_type是归一化的类型,常用的有NORM_MINMAX和NORM_L2。dtype是输出数组的数据类型,默认为-1,表示与输入数组保持一致。mask是可选的掩码数组,用于指定哪些元素参与归一化计算。 以下是一个示例代码,演示了如何使用OpenCV进行直方图归一化: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("image.jpg", IMREAD_GRAYSCALE); // 读取灰度图像 Mat hist; // 计算直方图 calcHist(&src, 1, 0, Mat(), hist, 1, &histSize, &histRange); // 归一化直方图 normalize(hist, hist, 0, 255, NORM_MINMAX); // 显示归一化后的直方图 Mat histImage(256, 256, CV_8UC1, Scalar(0)); for (int i = 0; i < 256; i++) { line(histImage, Point(i, 256), Point(i, 256 - cvRound(hist.at<float>(i))), Scalar(255)); } imshow("Normalized Histogram", histImage); waitKey(0); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值