Just a Computer Graphics Studio & My Life

產生亂數 (Generate Random Number)乍看之下很簡單,但其原理稍嫌複雜,在此瞭解基本概念與如何使用即可。

若只是想拿來使用,程式碼其實相當簡單呢!OpenCV的亂數產生用法跟C的亂數產生很相似。

程式碼


/**
	Theme: Generate Random Number
	Compiler: Dev C++ 4.9.9.2
	Library: OpenCV 2.0
	Date: 101/10/21
	Author: HappyMan
	Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    CvRNG rng;
    rng = cvRNG(cvGetTickCount());
    for(int i=0;i<10;i++)
    {
        //printf("%d\n",cvRandInt(&rng));
        printf("%d\n",cvRandInt(&rng)%256);
        //printf("%f\n",cvRandReal(&rng));
    }
    printf("The Tick Count is %d\n",cvGetTickCount());
    printf("The Tick Frequency is %d\n",cvGetTickFrequency());
    system("pause");
}

執行結果

123
19
102
21
247
40
204
81
106
210
The Tick Count is -276034833
The Tick Frequency is 1134421122
請按任意鍵繼續 . . .

函式功能

cvGetTickCount()
回傳系統時間數據。

cvGetTickFrequency()
回傳系統時脈頻率。

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

unsigned cvRandInt(CvRNG資料結構)
傳回均勻分佈(Uniform Distribution),32bits的隨機數。

double cvRandReal(CvRNG資料結構)
傳回均勻分佈(Uniform Distribution),0~1之間的隨機小數。

參考:OpenCV隨機的實作-基本隨機的應用

Advertisements

Comments on: "[OpenCV] 產生亂數 (Generate Random Number)" (1)

  1. […] 在瞭解OpenCV如何產生亂數之後,接下來實做產生亂數影像 (Generate Random Number for Image)。 OpenCV中提供兩種隨機亂數分佈:常態分佈(Normal Distribution)與均勻分佈(Uniform Distribution),來看看產生的影像有何差異。 […]

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: