555本来今天打算好好看书的。。结果在去实验室路上骑车摔了一跤。。电脑屏幕居然就这么就裂了。。蛋碎啊。。看了一下直方图。。
自己写了一段测试cvCalcHist的代码。。很简单。。就不一一解释了。。
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *Image = cvLoadImage("lena.jpg");
IplImage * grayImage = cvCreateImage(cvGetSize(Image),IPL_DEPTH_8U,1);
cvCvtColor(Image,grayImage,CV_RGB2GRAY);
CvHistogram* hist1,*hist2;
int size[1] = {16};
float range[2] = {0,128};
float *ranges[1] = {range};
hist1 = cvCreateHist(1,size,CV_HIST_ARRAY,ranges);
cvClearHist(hist1);
cvCalcHist(&grayImage,hist1);
int myHist[32];
for(int i = 0;i<32;i++)
myHist[i] = 0;
for(int i=0;i<Image->height;i++)
{
uchar* ptr = (uchar*)(grayImage->imageData+i*grayImage->widthStep);
for(int j=0;j<Image->width;j++)
{
myHist[*(ptr+j)/8]++;
}
}
for(int i=0;i<16;i++)
{
printf("%f ",hist1->mat.data.fl[i]);
}
printf("\n");
for(int i=0;i<32;i++)
{
printf("%d ",myHist[i]);
}
printf("\n");
cvReleaseHist(&hist1);
cvReleaseImage(&Image);
cvReleaseImage(&grayImage);
return 0;
}
最开始我的range是{0,255},size是32。。能够得到与自己统计相同的结果,但后来用{0,127}、16的时候,在最后一项统计上一直不对,后来查了下资料,发现上界应该设为128,而我最开始的range上界也应该是256,想来结果能正确的原因恐怕是lena里面木有像素值为255的点吧。。
也算不大不小的收获了。。