zoukankan      html  css  js  c++  java
  • 【练习7.1】cvCreateHist创建直方图、cvCalcHist计算直方图、cvQueryHistValue_1D访问直方图及右左法则

    提纲
    题目要求
    程序代码
    结果图片
    要言妙道

      

    题目要求:

     在0~1之间生成1000个随机值,定义bin的大小为10,并建立一个直方图

    a、输出每个bin中的数据

    程序代码:

     1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。
     2 //
     3 //D:\Work\Work_Programming\Source\Image\lena.jpg
     4 
     5 #include "stdafx.h"
     6 #include <cv.h>
     7 #include <highgui.h>
     8 #include <iostream>
     9 
    10 #include <opencv2/legacy/legacy.hpp>
    11 //#pragma comment(lib, "opencv_legacy2411.lib")
    12 
    13 using namespace cv;
    14 using namespace std;
    15 
    16 //函数声明-->--->-->--->-->--->-->--->//
    17 
    18 
    19 //<--<--<--<--<--<--<--<--<--函数声明//
    20 
    21 int _tmain(int argc, _TCHAR* argv[])
    22 {
    23     CvRNG rng;
    24     rng = cvRNG(cvGetTickCount());
    25     IplImage* src = cvCreateImage(cvSize(10, 100), IPL_DEPTH_32F, 1);
    26 
    27     for (int i = 0; i < 1000; ++i)
    28     {
    29         double value = cvRandReal(&rng);
    30         cvSetReal1D(src, i, value);
    31     }
    32 
    33     int dims = 1;
    34     int sizes[1] = { 10 };
    35     int type = CV_HIST_ARRAY;
    36     float arr[] = { 0.0f, 1.0f };
    37     float * rangs[] = { arr };
    38 
    39     CvHistogram *histogram = cvCreateHist(dims, sizes, type, rangs, 1);
    40     cvCalcHist(&src, histogram);
    41 
    42     float sum = 0.0f;
    43     for (int i = 0; i < 10; ++i)
    44     {
    45         float value = cvQueryHistValue_1D(histogram, i);
    46         cout << value << endl;
    47     }
    48     
    49     system("pause");
    50 
    51     cvWaitKey();
    52     cvReleaseImage(&src);
    53     cvDestroyAllWindows();
    54     rangs = NULL;
    55 
    56     return 0;
    57 }
    58 
    59 void DrawHistogram(IplImage * image_hist, const CvHistogram * histogram)
    60 {
    61 
    62 
    63 }

    结果图片:

    要言妙道:

     ① cvWaitKey(); 只有在之前调用该cvShowImage后才会等待,如果之前的代码没调过,则必须用 system("pause"); 才能暂停下来。但是,如果代码中有cvShowImage的操作,在 cvWaitKey(); 前一定不能使用 system("pause");  ,不然程序一直会暂停那里,鼠标一直转圈,显示不出图片   

    ②cvCreateHist的参数sizes即直方图的大小,相当于直方图包含元素的个数,如果是二维直方图,即直方图大小为2,包含两个一维直方图。sizes必须为整型数组,数组长度等于直方图的维数,数组中每一个整数表示分配给对应维数的bin的个数,例如直方图为一维,sizes必须为只包含一个整型元素的数组,该元素的值即为直方图bin的个数

    ③cvCreateHist的参数ranges是指向指针的指针,即二维数组,第一维的长度应等于bin的个数,第二维代表各个bin的的范围或分段情况,对于均匀直方图,第二维便是最小值和最大值组成的两个元素的数组;对于有N个bin的非均匀直方图,第二维是由N+1个元素组成的分段情况,例如本题如果使用非均匀可以是{0.0,0.14,0.25,0.31,0.29,0.55,0.60,0.66,0.79,0.82,1.0},这第二维工11个数,相邻的两个数代表一个bin的范围,这样若干个一维数组合成一个二维数组,本题的若干个=1个

    ④根据右左法则以 float * rangs[] 为例,rangs是一个数组,数组元素的类型为指针,指针式指向float的指针,其实这一点使用 float rangs[] 更容易理解,rangs是一个数组,数组元素是float型。

    ⑤cvCalcHist计算直方图即根据直方图的参数,算出落在每个bin中数量

    ⑥cvQueryHistValue_1D等函数即获取各个bin中元素的数量

  • 相关阅读:
    1024X768大图 (Wallpaper)
    (Mike Lynch)Application of linear weight neural networks to recognition of hand print characters
    瞬间模糊搜索1000万基本句型的语言算法
    单核与双核的竞争 INTEL P4 670对抗820
    FlashFTP工具的自动缓存服务器目录的功能
    LDAP over SSL (LDAPS) Certificate
    Restart the domain controller in Directory Services Restore Mode Remotely
    How do I install Active Directory on my Windows Server 2003 server?
    指针与指针变量(转)
    How to enable LDAP over SSL with a thirdparty certification authority
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4483410.html
Copyright © 2011-2022 走看看