產生亂數 (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之間的隨機小數。
Comments on: "[OpenCV] 產生亂數 (Generate Random Number)" (1)
[…] 在瞭解OpenCV如何產生亂數之後,接下來實做產生亂數影像 (Generate Random Number for Image)。 OpenCV中提供兩種隨機亂數分佈:常態分佈(Normal Distribution)與均勻分佈(Uniform Distribution),來看看產生的影像有何差異。 […]
讚讚