OpenCv裡的一些基本函式,持續更新中。。。。。

pamxy發表於2013-05-29

轉自:http://blog.csdn.net/wangluomin/article/details/8802722

本文在作者使用opencv過程中會持續更新。

1. cvRNG: 隨機數生成器

    CvRNG cvRNG( int64 seed); seed64-bit 的值用來初始化一個隨機序列函式 cvRNG ,初始化隨機數生成器並返回其狀態。指向這個狀態的指標可以傳遞給函式 cvRandInt, cvRandReal 和 cvRandArr .

  1. CvRNG rng;  
  2.     rng= cvRNG(cvGetTickCount());  
  3.     for (int i= 0;i<10;i++)  
  4.     {  
  5.         printf("%d/n",cvRandInt(&rng)%6);//如果%6出來的將會是0~255的正整數  
  6.         printf("%.2f/n",cvRandReal(&rng));  
  7.     }  
  8.     printf("Tick Frequency= %f/n",cvGetTickFrequency());  
  9.     system("pause");  
  10.     return 0;  
CvRNG rng;
    rng= cvRNG(cvGetTickCount());
    for (int i= 0;i<10;i++)
    {
        printf("%d/n",cvRandInt(&rng)%6);//如果%6出來的將會是0~255的正整數
        printf("%.2f/n",cvRandReal(&rng));
    }
    printf("Tick Frequency= %f/n",cvGetTickFrequency());
    system("pause");
    return 0;

    1) cvGetTickCount()

        返回64位長整數的時間資料,在OpenCV是為CvRNG設定的專用種子

    2) cvRNG()

        跟一般的C語言srand()使用方法一樣,要先給它一個種子,但srand()用到的是unsigned int的32位種子範圍,而           cvRNG()用的是64位長整數種子。

    3) cvRandInt()

       返回均勻分佈32位的隨機數均勻分佈為統計學上的專有名詞,表示長時間下所有數字出現的概率都是一樣的,        而cvRandint()在opencv裡使用的公式    temp = (uint64)(unsigned)temp*1554115554 + (temp >> 32);

    4) cvRandReal()

       返回均勻分佈,0~1之間的隨機小數,cvRandReal()的公式則是用
       cvRandInt(rng)*2.3283064365386962890625e-10  的方法,其實就是cvRandInt(rng)*2^(-32),也就是將                      cvRandInt()隨機出來的結果(32位除以2的三十二次方,因此,出現的結果將會是0~1之間的小數,也就是隨機0~1之        間。


 

2.IplImage* cvCloneImage

     函式cvCloneImage製作影象的完整備份,包括頭、ROI和資料

格式

IplImage* cvCloneImage(const IplImage* image);


3.CvHistogram* cvCreateHist

     CvHistogram* cvCreateHist( int dims, int* sizes, int type, float** ranges = NULL, int uniform = 1);

  • dims: 直方圖的維數,灰度圖為1,彩色圖為3;
  • *sizes: 直方圖裡面直放塊的個數;對於dims>1時,sizes是陣列,每個陣列元素表示不同維(dims)的直放塊個數。
  • type: 直方圖的表示格式:CV_HIST_ARRAY意味著直方圖資料表示為多維密集陣列 CvMatND;CV_HIST_TREE 意味著直方圖資料表示為多維稀疏陣列 CvSparseMat.
  • ranges: 圖中方塊範圍的陣列。如果uniform不為0 ,則ranges[i] ( 0<=i<dims )是包含兩個元素的範圍陣列,包括直方圖第i維的上界和下界。在第i維上的整個區域 [lower, upper]被分割成sizes[i]個相等的塊(sizes[i] 表示直方圖第i維的塊數)

       函式cvCreateHist建立一個指定尺寸的直方圖,並且返回建立的直方圖的指標。如果陣列的ranges是0,則直方塊的範圍必須由函式cvSetHistBinRanges稍後指定。

      void cvCalcHist(IplImage** image, CvHistogram* hist, int accumulate = 0, const CvArr* mask =NULL );


4. cvSetImageROI(IplImage* image,  CvRect )

    在設定影象的ROI之後,對影象所有的操作都在針對ROI區域的,而且座標是從ROI區域開始算起的。影象的尺寸也隨著變為ROI的尺寸。但是要注意一點:

       IplImage* image->width 表示的是原影象的寬度,而非ROI的。若能正確表示ROI區域的尺寸,要用cvGetSize(image),這樣得到的就是ROI的尺寸啦。

 

相關文章