一个随机数对象(RNG)用来产生随机数的伪随机序列。这样做的好处是你可以方便地得到多重伪随机数流。一旦随机数发生器创建,就会开始按需提供产生随机数的“服务”,无论是平均分布还是正态分布。

RNG& theRNG(void);

theRNG()函数为调用它的线程返回一个默认的随机数生成器。OpenCV自动为每一个执行中的线程创建一个cv::RNG的实例,因此再多线程中非常安全。如果你只想要一个数或者只初始化一个数组,用cv::randu()或者cv::randn()。

void setRNGSeed(int seed);//设置随机数序列的种子

cv::RNG::operator T()

下面是重载的类型转换操作符,可以将RNG对象转换成任何你想要的类型。

operator uchar();
/** @overload */
operator schar();
/** @overload */
operator ushort();
/** @overload */
operator short();
/** @overload */
operator unsigned();
/** @overload */
operator int();
/** @overload */
operator float();
/** @overload */
operator double();

产生整型数的时候,它们将覆盖整个可能的取值范围。当产生浮点数的时候,它的范围始终是{0.0,1.0]。

RNG rng = theRNG();
cout << "An integer: " << int(rng) << endl;
cout << "An float: " << float(rng) << endl;

cv::RNG::operator()

unsigned operator ()();//返回随机值在0-UINT_MAX之间
unsigned operator ()(unsigned N);//返回值在0-(N-1)之间

cv::RNG::uniform()

int uniform(int a, int b);
float uniform(float a, float b);
double uniform(double a, double b);

函数在[a,b)的范围内产生平均分布的随机数。

float x = rng.uniform(0, 1);

注意,上面这个情况只能得到0.f,因为0和1是整型数,在[0,1)范围内只有0,要想得到浮点数,应使用

float x = rng.uniform(0.f, 1.f);

主要是在YOLOv5的部署中,不同类别用不同的颜色,当类别很多时,随机产生num_classes个颜色比较方便.

    RNG rng = theRNG();
vector<Scalar> colors;
for (int i = 0; i < 80; i++){
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
colors.push_back(Scalar(b, g, r));

cv::RNG::gaussian()

double gaussian(double sigma);
void fill( InputOutputArray mat, //输入数组,值会被覆盖
      int distType, //分布的类型(gaussian or uniform)
      InputArray a, //min(uniform) or mean(Gaussian)
      InputArray b,   //max(uniform) or std-deviation(Guassian)
      bool saturateRange = false
);

InputOutputArray 输入输出矩阵,最多支持4通道,超过4通道先用reshape()改变结构。

int distType UNIFORM 或 NORMAL,表示均匀分布和高斯分布。

InputArray a disType是UNIFORM,a表示为下界(闭区间);disType是NORMAL,a均值。

InputArray b disType是UNIFORM,b表示为上界(开区间);disType是NORMAL,b标准差。

bool saturateRange=false 只针对均匀分布有效。当为真的时候,会先把产生随机数的范围变换到数据类型的范围,再产生随机数。如果为假,会先产生随机数,再进行截断到数据类型的有效区间

RNG rng = theRNG();
double a = rng.gaussian(2.0);
cout << a << endl; Mat b(1, 10, CV_8UC1);
rng.fill(b, RNG::UNIFORM, 1, 10);
cout << b << endl;

Opencv笔记(11)随机数发生器cv::RNG的更多相关文章

  1. C++11随机数发生器

    前言 一直知道所谓的"随机数"都是伪随机,事实上也是满足某种规则生成的.有些程序测试时通常需要一个随机数源,但在新标准出现之前,C++都是依赖简单的C库函数rand来生成随机数的. ...

  2. 图像储存容器Mat[OpenCV 笔记11]

    IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...

  3. C语言基础(11)-随机数发生器

    一. rand() rand是一个C语言库函数,功能是生成一个随机数.rand需要一个不同的种子,才能生成不同的随机数. 二. srand(int seed) rand需要一个不同的种子,才能生成不同 ...

  4. 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...

  5. 查找并绘制轮廓[OpenCV 笔记XX]

    好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findCo ...

  6. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

  7. opencv笔记1:opencv的基本模块,以及环境搭建

    opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...

  8. Core模块其他常用知识点[OpenCV 笔记14]

    Matx 轻量级的Mat,必须在使用前规定好大小,比如一个2x3的float型的Matx,可以声明为Matx23f Vec Vec是Matx的一个派生类,是一个一维的Matx,跟vector很相似.在 ...

  9. OpenCV笔记大集锦(转载)

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  10. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

随机推荐

  1. webpack 配置热更新

    正文 代码 const path=require('path'); module.exports={ devtool:'', entry:{ entry:'./src/entry.js', entry ...

  2. JavaSE开发基础--包机制&JavaDoc&Scanner&循环结构&方法&数组

    包机制 如果文件在包中需要 在文件首行添加 package 地址 package pkg1.pkg2.pkg3 import package1 JavaDoc /** * @author作者名 * @ ...

  3. Python爬取网页遇到:selenium.common.exceptions.WebDriverException解决方法

    在PyCharm中写好下列程序: 一运行遇到下列报错: selenium.common.exceptions.WebDriverException: Message: 'chromedriver' e ...

  4. 【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率

    简介: 近日,关于机器学习访存密集计算编译优化框架的论文<AStitch: Enabling A New Multi-Dimensional Optimization Space for Mem ...

  5. 400倍加速, PolarDB HTAP实时数据分析技术解密

    简介: PolarDB MySQL是因云而生的一个数据库系统, 除了云上OLTP场景,大量客户也对PolarDB提出了实时数据分析的性能需求.对此PolarDB技术团队提出了In-Memory Col ...

  6. Arthas 初探--安装初步适用

    简介: 由于在项目中遇到一种情况,某段代码在进行单元测试和在 tomcat 容器中运行的性能相差数百倍,因此需要分析在不同环境下某个方法执行的具体时间,从而确定问题.Arthas 可以做到无侵入的监控 ...

  7. python01-03作业

    # 小球落地,一共运动了多少米 hight = 100 # 原始高度 distance = 0 # 和 for i in range(10): # 将 下落 高度加入到 和 中 distance += ...

  8. MyBatis源码之MyBatis中SQL语句执行过程

    MyBatis源码之MyBatis中SQL语句执行过程 SQL执行入口 我们在使用MyBatis编程时有两种方式: 方式一代码如下: SqlSession sqlSession = sqlSessio ...

  9. Higress 基于自定义插件访问 Redis

    简介 基于 wasm 机制,Higress 提供了优秀的可扩展性,用户可以基于 Go/C++/Rust 编写 wasm 插件,自定义请求处理逻辑,满足用户的个性化需求,目前插件已经支持 redis 调 ...

  10. JAVA下唯一一款搞定OLTP+OLAP的强类型查询这就是最好用的ORM相见恨晚

    JAVA下唯一一款搞定OLTP+OLAP的强类型查询这就是最好用的ORM相见恨晚 介绍 首先非常感谢 FreeSQL 提供的部分源码,让我借鉴了不少功能点,整体设计并没有参考FreeSQL(因为jav ...