opencv calcHist的结果不是预期的

时间:2014-06-25 08:49:59

标签: c++ opencv histogram

在openCV中,我有一个整数矩阵(4000x1 Mat)。每次我读取此矩阵的不同范围:Mat labelsForHist = labels(Range(from,to),Range(0,1));

范围的大小是可变的。然后我将labelsForHist矩阵转换为float(因为calcHist不接受int值!),使用:

labelsForHist.convertTo(labelsForHistFloat, CV_32F);

在此之后,我使用以下参数调用calcHist:

Mat hist;
int histSize = 4000;
float range[] = { 0, 4000 } ;
int channels[] = {0};
const float* histRange = { range };
bool uniform = true; bool accumulate = false;
calcHist(&labelsForHistFloat,1,channels,Mat(),hist,1,&histSize,&histRange,uniform,accumulate);

使用以下结果标准化结果:

 normalize(hist,hist,1,0,NORM_L1,-1,Mat());

问题是我的直方图看起来并不像我期待的那样。关于我做错了什么或者问题来自代码的其他部分(而不是直方图的计算)?

我希望这个稀疏的直方图:enter image description here

当我得到这个平直线图时,对于相同的数据: enter image description here

第一个hist是在python中计算的,但我想在c ++中做同样的事情

在计算直方图之前有一个聚类过程,所以如果创建直方图没有问题,那么在聚类部分之前就会出现问题!

0 个答案:

没有答案