OpenCV规格化函数,结果不等于1

OpenCV Normalize Function, Result Does Not Sum To One

本文关键字:不等于 结果 规格化 函数 OpenCV      更新时间:2023-10-16

我在下面的代码中使用normalize函数。我的理解是,将直方图归一化会导致二进制数相加为1?但当我把它们加起来的时候,我得到的结果总是比一高。我不知道是我做错了什么,还是误解了函数的作用?

//read in image
Mat img = imread("image.jpg",1);
vector<Mat> planes;
split(img, planes);
//calculate hist
MatND hist;
int nbins = 256; // hold 256 levels
int hsize[] = { nbins }; // one dimension
float range[] = { 0, 255 };
const float *ranges[] = { range };
int chnls[] = {0};
calcHist(&planes[0], 1, chnls, Mat(), hist,1,hsize,ranges);
//normalise
normalize(hist,hist,1);
float tot = 0;
for( int n = 0;n < nbins; n++ )
    {
        float binVal = hist.at<float>(n);
        tot+=binVal;
    }
cout<<tot;

归一化数组的和不等于1,但分量平方和的平方根等于1,例如在向量中:

当出现以下情况时,它将被规范化:sqrt(x^2+y^2+z^2)=1

*这适用于矢量

在OpenCV-直方图-归一化中,这里描述了OpenCV直方图归一化,应该很清楚(在阅读规范后),它不必求和为1