OpenCV之RNG随机数生成器

简介

OpenCV中C++的RNG类可以压缩一个64位的i整数并可以得到scalar和array的随机
数。目前的版本支持均匀分布随机数Gaussian分布随机数。随机数的产生采用的
是Multiply-With-Carry算法和Ziggurat算法。其构造函数的初始化可以传入一个
64位的整型参数作为随机数产生器的初值。

  • next 可以取出下一个随机数
  • uniform 返回指定范围的随机数
  • gaussian 返回一个高斯随机数
  • fill 随机数填充矩阵

环境 Qt5.9.1 + OpenCv3.1.0

例子

1
2
3
4
5
6
7
8
9
10
11
RNG rng;
cv::Mat image1(500,500,CV_8UC3,
cv::Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)));
cv::namedWindow("image 1");
imshow("image 1", image1);
cv::Mat image2(500,500,CV_32FC3,
cv::Scalar(rng.uniform(0.0,1.0),rng.uniform(0.0,1.0),rng.uniform(0.0,1.0)));
cv::namedWindow("image 2");
imshow("image 2", image2);

其中 rng.uniform(i,j)的作用就是获取在某一范围之内的随机数,如果ij类型
需要相同,返回值为与其同类型的随机数。

需要注意的是rng.uniform(0,1.0)会因类型不同而报错,
rng.uniform(0,1)只能返回0。

参考:OpenCV学习(十一)之随机数生成器RNG

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器