7创建一个包含直方图1000个随机值

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);
}

结果图片;
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值