RNG类是OpenCV中的一个基本随机数生成工具
在OpenCV中,
RNG
类是用于生成随机数的伪随机数生成器(Pseudo-Random Number Generator),它可以用于生成各种类型的随机数,如整数、浮点数和随机颜色,这个类位于opencv2/core/types.hpp
头文件中;
RNG可以产生3种随机数文章来源:https://www.toymoban.com/news/detail-681850.html
- RNG(int seed) 使用种子seed产生一个64位随机整数,seed默认-1
- RNG::uniform( ) 产生一个均匀分布的随机数
- RNG::gaussian( ) 产生一个高斯分布(又叫正态分布)的随机数
1、初始化一个RNG对象
cv::RNG rng; // 默认情况下随机数种子seed=-1,也可以指定随机数种子RNG rng(12345)
// rng既是一个RNG对象,也是一个随机整数
// 得到一个64位随机整数
int N1 = rng;
2、产生一个均匀分布的随机数
(1)产生一个[min_value, max_value)范围的均匀分布的整数
int randomInt = rng.uniform(min_value, max_value);
(2)产生一个[min_value, max_value)范围的均匀分布的浮点数
double randomDouble = rng.uniform(min_value, max_value);
示例:
//总是得到double类型数据0.000000,因为会调用uniform(int,int),只会取整数,所以只产生0
double N1a = rng.uniform(0,1);
//产生[0,1)范围内均匀分布的double类型数据
double N1b = rng.uniform((double)0,(double)1);
//产生[0,1)范围内均匀分布的float类型数据,注意被自动转换为double了。
double N1c = rng.uniform(0.f,1.f);
//产生[0,1)范围内均匀分布的double类型数据。
double N1d = rng.uniform(0.,1.);
3、产生一个高斯分布(又叫正态分布)的随机数
// 产生一个均值为0,标准差为1的正态分布的随机数
double g = rng.gaussian(1.0);
// 产生一个均值为0,标准差为2的正态分布的随机数
double N1g = rng.gaussian(2);
4、获取下一个随机数
上面一次只能返回一个随机数,实际上系统已经生成一个随机数组,如果我们要连续获得随机数,没有必要重新定义一个RNG类,只需要取出随机数组的下一个随机数即可;文章来源地址https://www.toymoban.com/news/detail-681850.html
- RNG:: next 返回下一个64位随机整数
- RNG:: operator 返回下一个指定类型的随机数
示例:
RNG rng;
// 得到一个64位随机整数
int N1 = rng;
int N2 = rng.next(); // 返回下一个随机整数,即N1.next();
//返回下一个指定类型的随机数
int N2a = rng.operator uchar(); //返回下一个无符号字符数
int N2b = rng.operator schar(); //返回下一个有符号字符数
int N2c = rng.operator ushort(); //返回下一个无符号短型
int N2d = rng.operator short int(); //返回下一个短整型数
int N2e = rng.operator int(); //返回下一个整型数
int N2f = rng.operator unsigned int(); //返回下一个无符号整型数
int N2g = rng.operator float(); //返回下一个浮点数
int N2h = rng.operator double(); //返回下一个double型数
int N2i = rng.operator ()(); //和rng.next( )等价
int N2j = rng.operator ()(100); //返回[0,100)范围内的随机数
5、实例演示
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>
using namespace cv;
using namespace std;
int main() {
system("chcp 65001");
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
int w = canvas.cols;
int h = canvas.rows;
RNG rng(12345);
while (true) {
int c = waitKey(10);
if (c == 27) { // 退出
break;
}
int x1 = rng.uniform(0, w);
int y1 = rng.uniform(0, h);
int x2 = rng.uniform(0, w);
int y2 = rng.uniform(0, h);
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
canvas = Scalar(0, 0, 0);
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);
imshow("随机绘制演示", canvas);
}
waitKey();
destroyAllWindows();
return 0;
}
到了这里,关于RNG类是OpenCV中的一个基本随机数生成工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!