1.OpenCV中的随机数生成类RNG,其定义在core.hpp中。
class CV_EXPORTS RNG
{
public:
enum { UNIFORM=0, NORMAL=1 };
RNG();
RNG(uint64 state);
//! updates the state and returns the next 32-bit unsigned integer random number
unsigned next();
operator uchar();
operator schar();
operator ushort();
operator short();
operator unsigned();
//! returns a random integer sampled uniformly from [0, N).
unsigned operator ()(unsigned N);
unsigned operator ()();
operator int();
operator float();
operator double();
//! returns uniformly distributed integer random number from [a,b) range
int uniform(int a, int b);
//! returns uniformly distributed floating-point random number from [a,b) range
float uniform(float a, float b);
//! returns uniformly distributed double-precision floating-point random number from [a,b) range
double uniform(double a, double b);
void fill( InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false );
//! returns Gaussian random variate with mean zero.
double gaussian(double sigma);
uint64 state;
};
2.CvRNG,其定义在types_c.h中。
CvRNG cvRNG( int64 seed=-1 ); 初始化随机数生成器状态
seed : 64-bit 的值用来初始化一个随机序列。函数 cvRNG 初始化随机数生成器并返回其状态。指向这个状态的指针可以传递给函数 cvRandInt, cvRandReal 和 cvRandArr . 在通常的实现中使用一个 multiply-with-carry generator 。
cvGetRows( const CvArr* arr, CvMat* submat,int start_row, int end_row, int delta_row CV_DEFAULT(1));
void cvRandArr( CvRNG* rng, CvArr* arr, int dist_type, CvScalar param1, CvScalar param2 ); 用随机数填充数组并更新 RNG 状态。
unsigned cvRandInt( CvRNG* rng ); 返回 32-bit 无符号整型并更新 RNG。
double cvRandReal( CvRNG* rng ); 返回浮点型随机数并更新 RNG。
3.srand,其定义在stdlib.h中。void srand(unsigned seed),srand函数是随机数发生器的初始化函数。
srand(time(0));Srand是种下随机种子数,你每回种下的种子不一样,用Rand得到的随机数就不一样。为了每回种下一个不一样的种子,所以就选用Time(0),Time(0)是得到当前时时间值(因为每时每刻时间是不一样的了)。
int rand(void),rand函数用来产生随机数,当然是伪随数。
srand((uchar)time(NULL)); //生成0~5之间的随机数
for (int i = 0; i < 10; i++)
{
cout << rand() % 6 << ' ';
}
cout << endl;
RNG rng((uchar)time(NULL));
for (int i = 0; i < 10; i++)
{
cout << rng.uniform(0,5) << ' ';
}
cout << endl;
参考文献
【1】http://blog.csdn.net/xiahouzuoxin/article/details/38298269
【2】http://blog.163.com/zhuandi_h/blog/static/180270288201278101357186/