opencv-随机数

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值