OpenCV 4.13.0
開源計算機視覺庫 (Open Source Computer Vision)
正在載入...
正在搜尋...
未找到匹配項
cv::RNG 類參考

隨機數生成器。更多...

#include <opencv2/core.hpp>

cv::RNG 的協作圖

公開型別

enum  {
  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.cpp, samples/cpp/falsecolor.cpp, samples/cpp/image_alignment.cpp, samples/cpp/kmeans.cpp, samples/cpp/minarea.cpp, samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp, and samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp.

成員列舉文件

◆ 匿名列舉

匿名列舉
列舉值 (Enumerator)
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 )

用隨機數填充陣列。

引數
mat2D 或 N 維矩陣;目前矩陣的通道數超過 4 個將不被此方法支援,可以使用 Mat::reshape 作為可能的解決方法。
distType分佈型別,RNG::UNIFORMRNG::NORMAL
a第一個分佈引數;對於均勻分佈,這是包含的下界;對於正態分佈,這是均值。
b第二個分佈引數;對於均勻分佈,這是不包含的上界;對於正態分佈,這是標準差(標準差矩陣的對角線或完整的標準差矩陣)。
saturateRange預飽和標誌;僅用於均勻分佈;如果為 true,則方法將首先將 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:2882
int uniform(int a, int b)
返回從 [a,b) 範圍內的均勻分佈的整數隨機數

編譯器不會考慮您將 RNG::uniform 的結果分配給的變數的型別。對編譯器來說,唯一重要的是 a 和 b 引數的型別。因此,如果您想要一個浮點隨機數,但範圍邊界是整數,請在常量後面加上小數點,或者像 a1 初始化一樣,使用顯式型別轉換運算子。

引數
a返回的隨機數的下界(包含)。
b返回的隨機數的上界(不包含)。
示例
samples/cpp/convexhull.cpp, samples/cpp/falsecolor.cpp, samples/cpp/kmeans.cpp, samples/cpp/minarea.cpp, samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp, and samples/cpp/watershed.cpp.

成員資料文件

◆ state

uint64 cv::RNG::state

該類的文件由以下檔案生成: