OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
cv::RNG 类参考

随机数生成器。 更多…

#include <opencv2/core.hpp>

cv::RNG 的协作图

公共类型

枚举 {
  UNIFORM = 0 ,
  NORMAL = 1
}
 

公共成员函数

 RNG ()
 构造函数
 
 RNG (uint64 state)
 
void fill (InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false)
 用随机数填充数组。
 
double gaussian (double sigma)
 返回从高斯分布采样的下一个随机数。
 
unsigned next ()
 
 operator double ()
 
 operator float ()
 
 operator schar ()
 
 operator short ()
 
 operator uchar ()
 
 operator unsigned ()
 
 operator ushort ()
 
unsigned operator() ()
 返回从[0, N)均匀采样的随机整数。
 
unsigned operator() (unsigned N)
 
bool operator== (const RNG &other) const
 
double uniform (double a, double b)
 
float uniform (float a, float b)
 
int uniform (int a, int b)
 返回[a,b)范围内均匀分布的随机整数
 

公共属性

uint64 state
 

详细描述

随机数生成器。

随机数生成器。它封装了状态(当前是一个 64 位整数),并具有返回标量随机值和用随机值填充数组的方法。目前它支持均匀分布和高斯(正态)分布。该生成器使用 G. Marsaglia 引入的乘法递增算法(http://en.wikipedia.org/wiki/Multiply-with-carry)。高斯分布随机数使用 G. Marsaglia 和 W. W. Tsang 引入的 Ziggurat 算法生成(http://en.wikipedia.org/wiki/Ziggurat_algorithm)。

示例
samples/cpp/convexhull.cppsamples/cpp/falsecolor.cppsamples/cpp/image_alignment.cppsamples/cpp/kmeans.cppsamples/cpp/minarea.cppsamples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cppsamples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp

成员枚举文档

◆ 匿名枚举

匿名枚举
枚举器
UNIFORM 
NORMAL 

构造函数和析构函数文档

◆ RNG() [1/2]

cv::RNG::RNG ( )

构造函数

这些是RNG构造函数。第一种形式将状态设置为某个预定义值,在当前实现中等于 2**32-1。第二种形式将状态设置为指定值。如果您传入 state=0,构造函数将改为使用上述默认值,以避免由全零组成的奇异随机数序列。

◆ RNG() [2/2]

cv::RNG::RNG ( uint64 state)

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

参数
state用于初始化RNG 的 64 位值。

成员函数文档

◆ fill()

void cv::RNG::fill ( InputOutputArray mat,
int distType,
InputArray a,
InputArray b,
bool saturateRange = false )

用随机数填充数组。

参数
mat二维或 N 维矩阵;目前该方法不支持超过 4 个通道的矩阵,可以使用Mat::reshape作为可能的解决方法。
distType分布类型,RNG::UNIFORMRNG::NORMAL
a第一个分布参数;对于均匀分布,这是一个包含的下界,对于正态分布,这是一个均值。
b第二个分布参数;对于均匀分布,这是一个不包含的上界,对于正态分布,这是一个标准差(标准差矩阵的对角线或完整的标准差矩阵)。
saturateRange预饱和标志;仅用于均匀分布;如果为真,则该方法将首先将 a 和 b 转换为可接受的值范围(根据 mat 数据类型),然后将在范围 [saturate(a), saturate(b)) 内生成均匀分布的随机数,如果 saturateRange=false,则该方法将在原始范围 [a, b) 内生成均匀分布的随机数,然后对其进行饱和,这意味着,例如,theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX) 可能会产生大部分填充了 0 和 255 的数组,因为范围 (0, 255) 明显小于 [-DBL_MAX, DBL_MAX)。

每种方法都用指定分布的随机值填充矩阵。随着新数字的生成,RNG状态也会相应更新。对于多通道图像,每个通道都是独立填充的,这意味着RNG无法直接从具有非对角协方差矩阵的多维高斯分布生成样本。为此,该方法从均值为零且协方差矩阵为单位矩阵的多维标准高斯分布生成样本,然后使用变换将它们转换为指定高斯分布的样本。

示例
samples/cpp/kmeans.cpp.

◆ gaussian()

double cv::RNG::gaussian ( double sigma)

返回从高斯分布采样的下一个随机数。

参数
sigma分布的标准差。

该方法使用MWC算法变换状态,并返回来自高斯分布N(0,sigma) 的下一个随机数。也就是说,返回的随机数的均值为零,标准差为指定的sigma。

◆ next()

unsigned cv::RNG::next ( )

该方法使用MWC算法更新状态,并返回下一个32位随机数。

◆ operator double()

cv::RNG::operator double ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator float()

cv::RNG::operator float ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator schar()

cv::RNG::operator schar ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator short()

cv::RNG::operator short ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator uchar()

cv::RNG::operator uchar ( )

每种方法都使用MWC算法更新状态,并返回指定类型的下一个随机数。对于整数类型,返回的数字来自指定类型的可用值范围。对于浮点类型,返回值来自[0,1)范围。

◆ operator unsigned()

cv::RNG::operator unsigned ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator ushort()

cv::RNG::operator ushort ( )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ operator()() [1/2]

unsigned cv::RNG::operator() ( )

返回从[0, N)均匀采样的随机整数。

这些方法使用MWC算法转换状态并返回下一个随机数。第一种形式等效于RNG::next。第二种形式返回随机数模N,这意味着结果在[0, N)范围内。

◆ operator()() [2/2]

unsigned cv::RNG::operator() ( unsigned N)

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

参数
N返回随机数的非包含上限。

◆ operator==()

bool cv::RNG::operator== ( const RNG & other) const

◆ uniform() [1/3]

double cv::RNG::uniform ( double a,
double b )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ uniform() [2/3]

float cv::RNG::uniform ( float a,
float b )

这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。

◆ uniform() [3/3]

int cv::RNG::uniform ( int a,
int b )

返回[a,b)范围内均匀分布的随机整数

这些方法使用MWC算法转换状态,并返回从输入参数类型推断出的指定类型的下一个均匀分布的随机数,范围为[a, b)。以下示例说明了一个细微之处

RNG rng;
// 始终产生0
double a = rng.uniform(0, 1);
// 产生[0, 1)范围内的double
double a1 = rng.uniform((double)0, (double)1);
// 产生[0, 1)范围内的float
float b = rng.uniform(0.f, 1.f);
// 产生[0, 1)范围内的double
double c = rng.uniform(0., 1.);
// 可能会导致编译器错误,因为存在歧义
// RNG::uniform(0, (int)0.999999)? 或 RNG::uniform((double)0, 0.99999)?
double d = rng.uniform(0, 0.999999);
随机数生成器。
定义 core.hpp:2874
int uniform(int a, int b)
返回[a,b)范围内均匀分布的随机整数

编译器不会考虑您将RNG::uniform结果赋值到的变量的类型。对编译器来说唯一重要的是a和b参数的类型。因此,如果您想要一个浮点随机数,但范围边界是整数,则在它们是常量的情况下在末尾加上点,或者使用显式类型转换运算符,如上面的a1初始化所示。

参数
a返回随机数的包含下限。
b返回随机数的非包含上限。
示例
samples/cpp/convexhull.cppsamples/cpp/falsecolor.cppsamples/cpp/kmeans.cppsamples/cpp/minarea.cppsamples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cppsamples/cpp/watershed.cpp

成员数据文档

◆ state

uint64 cv::RNG::state

此类的文档是从以下文件生成的