OpenCV规范化函数,结果不总和为一

时间:2012-02-12 15:04:39

标签: c++ opencv normalize

我在下面的代码中使用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;

1 个答案:

答案 0 :(得分:5)

归一化数组不总和为1,但组分的平方和的平方根等于1,F.e。在向量中:

在以下情况下进行标准化: sqrt(x ^ 2 + y ^ 2 + z ^ 2)= 1

*这适用于矢量

在OpenCV中的

- 直方图 - 规范化在这里描述OpenCV histogram normalize,应该清楚(在阅读规范之后)它不必总和为1