7创建一个包含直方图1000个随机值
在0~1之间生成1000个随机值ri,定义一个bin的大小,并且建立一个直方图1/ri,,具体代码如下:
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
int main(int argc, char* argv[])
{
//产生1000个随机数
CvRNG rng;
IplImage *Img = cvCreateImage(cvSize(1000,1),32,1); //数据图像
cvSetZero(Img); //清零
rng = cvRNG(cvGetTickCount()); //64位长整数的时间数据作为种子
for (int i = 0; i<1000; i++)
{
double value; //获取的随机值
cvSetReal1D(Img, i, cvRandReal(&rng)); //返回均匀分布,0~1之间的随机小数
value = cvGetReal1D(Img, i); //返回图像中小数值
//printf("%d\n", cvRandInt(&rng) % 6); //返回均匀分布32位的随机数,%6将会是0~255的正整数
printf("%.2lf\n", value); //打印
}
printf("Tick Frequency= %f\n", cvGetTickFrequency()); //系统时钟频率
system("pause");
//建立直方图
CvHistogram *hist;
int dims = 1; //维数
int bins = 1000; //bins个数
int hist_size[] = { bins }; //对应维数包含bins个数的数组
float range[] = { 0, 1 }; //划分范围[0,1]
float* ranges[] = { range }; //划分范围数对, ****均匀bin,range只要最大最小边界
//创建直方图 (维数,对应维数bins个数,密集矩阵方式存储,划分范围数对,均匀直方图)
hist = cvCreateHist(dims, hist_size, CV_HIST_ARRAY, ranges, 1);
IplImage *img[] = { Img }; //计算直方图的图像数组
cvCalcHist(img, hist, 0, 0); //计算直方图
for (int j = 0; j < bins; j++)
{
float bin_val = cvQueryHistValue_1D(hist,j); //获取直方图相应bin中的浮点数
cout << "the bins of " << j << ":" << bin_val << endl;
}
system("pause");
cvWaitKey(0);
cvReleaseHist(&hist);
cvReleaseImage(&Img);
}
结果图片;