Opencv笔记(11)随机数发生器cv::RNG
一个随机数对象(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的更多相关文章
- C++11随机数发生器
前言 一直知道所谓的"随机数"都是伪随机,事实上也是满足某种规则生成的.有些程序测试时通常需要一个随机数源,但在新标准出现之前,C++都是依赖简单的C库函数rand来生成随机数的. ...
- 图像储存容器Mat[OpenCV 笔记11]
IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...
- C语言基础(11)-随机数发生器
一. rand() rand是一个C语言库函数,功能是生成一个随机数.rand需要一个不同的种子,才能生成不同的随机数. 二. srand(int seed) rand需要一个不同的种子,才能生成不同 ...
- 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...
- 查找并绘制轮廓[OpenCV 笔记XX]
好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findCo ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- opencv笔记1:opencv的基本模块,以及环境搭建
opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...
- Core模块其他常用知识点[OpenCV 笔记14]
Matx 轻量级的Mat,必须在使用前规定好大小,比如一个2x3的float型的Matx,可以声明为Matx23f Vec Vec是Matx的一个派生类,是一个一维的Matx,跟vector很相似.在 ...
- OpenCV笔记大集锦(转载)
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
随机推荐
- 重新点亮linux 命令树————用户和用户组管理[六]
前言 简单整理一下用户和用户组管理. 正文 主要是介绍下面的命令: useradd 新建用户 userdel 删除用户 passwd 修改用户面 usermod 修改用户属性 chage 修改用户属性 ...
- IIS 动态与静态压缩
前言 我们有时候需要在页面启动的时候进行压缩代码,这时候iis已经帮助我们做好了动态压缩代码. 正文 静态压缩及动态压缩的区别 IIS7中的HTTP压缩分为"静态内容压缩"和&qu ...
- Oracle SQL 常用的将varchar数据处理成number的正则
Oracle SQL 常用的数据处理正则 去除所有的空格 replace(t.dxmz,chr(32),'') 匹配非纯数字 not regexp_like(t.zgbs,'^[[:digit:]]* ...
- OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略
简介: 在 OpenYurt v1.1.0 版本中,我们提供了 Auto 和 OTA 的升级策略.Auto 的升级策略重点解决由于节点 NotReady 而导致 DaemonSet升级阻塞的问题,OT ...
- 关于Kubernetes规划的灵魂n问
Kubernetes已经成为企业新一代云IT架构的重要基础设施,但是在企业部署和运维Kubernetes集群的过程中,依然充满了复杂性和困扰.阿里云容器服务自从2015年上线后,一路伴随客户和社区的成 ...
- 国内唯一!阿里云容器服务进入 Forrester 领导者象限
简介:近日,国际权威咨询机构 Forrester 发布< The Forrester WaveTM: Public Cloud Container Platforms, Q1 2022 > ...
- Nacos 2.0 升级前后性能对比压测
简介: Nacos 2.0 通过升级通信协议和框架.数据模型的方式将性能提升了约 10 倍,解决继 Nacos 1.0 发布逐步暴露的性能问题.本文通过压测 Nacos 1.0,Nacos 1.0 升 ...
- S3-FIFO
S3-FIFO 本文作为下一篇缓存文章的预备知识. 背景 基于LRU和FIFO的驱逐 FIFO和LRU都是经典的缓存驱逐算法,在过去几十年中也出现了很多追求更高效率的驱逐算法,如ARC, 2Q, LI ...
- PostMan接口测试实用小点
PostMan接口测试实用小点 1. 接口测试变量存取操作 在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值. 在环 ...
- SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等)
前言 熟悉Spring框架的同学一定都知道MVC开发模式吧,控制器(Controller).业务类(Service).持久层(Repository).数据库映射(Mapper).各种DO类构成了我们服 ...