OpenCV学习笔记(十二)——随机数产生器RNG
2011-11-03 11:36
281 查看
用OpenCV做算法的朋友们肯定为随机数烦恼过,新版本一直支持随机数产生器啦,而且还继续支持之前版本的c格式的函数,不过与时俱进,我这里介绍C++的RNG类。它可以压缩一个64位的i整数并可以得到scalar和array的随机数。目前的版本支持均匀分布随机数和Gaussian分布随机数。随机数的产生采用的是Multiply-With-Carry算法和Ziggurat算法。
其构造函数的初始化可以传入一个64位的整型参数作为随机数产生器的初值。next可以取出下一个随机数,uniform函数可以返回指定范围的随机数,gaussian函数返回一个高斯随机数,fill则用随机数填充矩阵。
这里介绍一个uniform的使用事项,就是比如利用它产生0~1的随机数的问题,具体代码如下:
就是不能写成rng.uniform( 0 , 1),因为输入为int型参数,会调用uniform(int,int),只能产生0。请大家注意使用^_^
还有一些随机数相关的函数,比如randu可以产生一个均匀分布的随机数或者矩阵,randn可以产生一个正态分布的随机数,randShuffle可以随机打乱矩阵元素
再简单介绍一下c版本的随机数产生器的相关函数,有cvRNG、cvRandArr、cvRandInt、cvRandReal
其构造函数的初始化可以传入一个64位的整型参数作为随机数产生器的初值。next可以取出下一个随机数,uniform函数可以返回指定范围的随机数,gaussian函数返回一个高斯随机数,fill则用随机数填充矩阵。
这里介绍一个uniform的使用事项,就是比如利用它产生0~1的随机数的问题,具体代码如下:
RNG rng; // always produces 0 double a = rng.uniform(0, 1); // produces double from [0, 1) double a1 = rng.uniform((double)0, (double)1); // produces float from [0, 1) double b = rng.uniform(0.f, 1.f); // produces double from [0, 1) double c = rng.uniform(0., 1.); // may cause compiler error because of ambiguity: // RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)? double d = rng.uniform(0, 0.999999);
就是不能写成rng.uniform( 0 , 1),因为输入为int型参数,会调用uniform(int,int),只能产生0。请大家注意使用^_^
还有一些随机数相关的函数,比如randu可以产生一个均匀分布的随机数或者矩阵,randn可以产生一个正态分布的随机数,randShuffle可以随机打乱矩阵元素
再简单介绍一下c版本的随机数产生器的相关函数,有cvRNG、cvRandArr、cvRandInt、cvRandReal
相关文章推荐
- OpenCV学习笔记(十二)——随机数产生器RNG
- opencv学习笔记-种子随机数产生器RNG
- OpenCV2学习笔记(十二):特征提取算法SIFT与SURF
- 【OpenCV学习笔记】【函数学习】十二(cvCanny()函数及其阈值设置的比较)
- python OpenCV学习笔记(十二):形态转换
- opencv中用RNG产生随机数
- OpenCV学习笔记(3):点集的最小外接矩形/圆,RNG类
- Java学习笔记_2_产生随机数或随机字符
- OpenCV学习笔记十二:opencv_video模块
- 【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并
- 数组的生成及其随机数【OpenCV学习笔记2】
- opencv 2.x学习笔记(十二)直方图均衡化
- opencv_python学习笔记十二
- opencv学习笔记(十二)——基础应用
- OpenCV学习笔记之随机数生成器
- OpenCV学习之八:RNG类 随机数生成函数的使用
- opencv中RNG产生随机数问题
- openCv学习笔记(十二)—贝叶斯分类
- OpenCV2学习笔记(十二):特征提取算法SIFT与SURF
- java 学习笔记 随机数产生的两种办法Math.random()和Random类