Random Number Generator(RNG) - OpenCV 난수 발생기 사용
OpenCV 2019. 7. 13. 23:32 |Random number generator. It encapsulates the state (currently, a 64-bit integer) and has methods to return scalar random values and to fill arrays with random values. Currently, it supports uniform and Gaussian (normal) distributions. The generator uses Multiply-With-Carry algorithm, introduced by G. Marsaglia (http://en.wikipedia.org/wiki/Multiply-with-carry). Gaussian-distribution random numbers are generated using the Ziggurat algorithm (http://en.wikipedia.org/wiki/Ziggurat_algorithm), introduced by G. Marsaglia and W. W. Tsang.
아래 코드는 OpenCV에서 지원하는 난수 발생기의 사용 방법 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { RNG rng(getTickCount()); // Constructor sets the state to the specified value. Mat mat(300, 400, CV_8SC3); // Fills arrays with random numbers. rng.fill(mat, RNG::UNIFORM, Scalar::all(0), Scalar::all(255)); // Returns uniformly distributed integer random number from [a,b) range cout << "RNG::uniform()" << endl; cout << "- rng.uniform(0, 255): " << rng.uniform(0, 255) << endl; cout << "- rng.uniform(0.0f, 255.0f): " << rng.uniform(0.0f, 255.0f) << endl; cout << "- rng.uniform(0.0, 255.0): " << rng.uniform(0.0, 255.0) << endl << endl; // Returns a random integer sampled uniformly from [0, N). cout << "RNG::operator()" << endl; for (int i = 0; i < 5; i++) cout << "- rng(10): " << rng(10) << endl; // The method updates the state using the MWC algorithm and returns // the next 32-bit random number. cout << endl << "RNG::next()" << endl; for (int i = 0; i < 5; i++) cout << "- rng.next(): " << rng.next() << endl; imshow("RNG", mat); waitKey(0); return 0; } | cs |
Matrix filled by RNG::fill().
Random numbers generated by RNG.