opencv-随机数

来源:互联网 发布:黑色星期五海淘 知乎 编辑:程序博客网 时间:2024/05/22 15:07

1.OpenCV中的随机数生成类RNG,其定义在core.hpp中。

<span style="font-size:18px;">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;};</span>

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/



0 0
原创粉丝点击