我在下面的代码中使用normalize函数。我的理解是,对直方图进行标准化会导致这些箱子总和为一个?但是当我把它们全部添加起来时,我会得到比一个更高的结果。我不知道我做错了什么或误解了这个函数是做什么的?
//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;
答案 0 :(得分:5)
归一化数组不总和为1,但组分的平方和的平方根等于1,F.e。在向量中:
在以下情况下进行标准化: sqrt(x ^ 2 + y ^ 2 + z ^ 2)= 1
*这适用于矢量
在OpenCV中的- 直方图 - 规范化在这里描述OpenCV histogram normalize,应该清楚(在阅读规范之后)它不必总和为1