OpenCV中的随机数与随机种子_opencv rand-程序员宅基地

技术标签: OpenCV  随机  

我们先从在C/C++中的随机数与随机种子说起。

rand()、srand()

rand()可以生成一个0~RAND_MAX之间的一个随机数,返回值是一个unsigned int类型值。rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。

srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);srand和rand()配合使用产生伪随机数序列。

而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始 值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的。

所以为了避免上述情况的发生我们通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))来 产生种子。如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。例如,srand((unsigned)time(NULL)*10)另外,关于time_t time(0):time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。NULL的值就是0。规定0可以赋值给任意指针,除0以外的任何数值都不能赋值给指针。

关于time函数介绍如下。

time()

time() 是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的总秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。

time_t time(time_t *t);

如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。

有了以上的知识介绍,我们就可以顺利地过渡到OpenCV。

在OpenCV中,有个RNG类,用它来产生随机数。可以使用RNG的构造函数,来创建随机数生成器的对象。代码如下:

RNG rng(12345);  //指定随机种子位12345

固定的随机种子,从而产生固定的随机数序列。那么如何让每次生成的随机数序列是不一样的呢?

没错,就是使用C/C++中相同的思路,使用系统时间(1970年1月1日零时零分零秒,到目前为止所经历德 总秒数)来作为随机种子。代码如下:

RNG rng((unsigned)time(NULL));  //NULL写成0是一样的,NULL就是0

uniform()

关于RNG类,再提到一个它的函数,uinform()

uniform:指定了一个在a和b范围的均匀分布的随机数

rng.uniform(1,255); //返回一个在1~255范围内的随机数

例如uniform在颜色随机上的应用。

Scalar color = Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)); //任意值

关于随机数指定范围,可以用随机数取余来解决

比如,rand() % 255 ,那么就会返回在0~255范围内的一个随机数

为啥?

因为任何被除数除以一个数,余数肯定小于被除数。

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Young__Fan/article/details/82715490

智能推荐

innoSetup生成QT安装包_inno setup qt-程序员宅基地

文章浏览阅读267次,点赞2次,收藏5次。本文介绍了如何用innoSetup完成QT程序打包。_inno setup qt

常见的通讯协议总结(USART、IIC、SPI、485、CAN)-程序员宅基地

文章浏览阅读3.8w次,点赞152次,收藏1.2k次。计算机通信是指将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。按照数据传输方式的不同,可以分为串行通信和并行通信两类。_通讯协议

Word怎样使文档铺满页面充满整页并且插入空格行成巡检表_怎样把选定的段落自动充满一整页-程序员宅基地

文章浏览阅读1.2k次。Word怎样使文档铺满页面充满整页并且插入空格行成巡检表_怎样把选定的段落自动充满一整页

实现高性能ID生成器:详解Java雪花算法_java雪花算法生成id-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏11次。Java中的雪花算法(Snowflake Algorithm)是一种用于生成唯一ID的算法,可以在分布式系统环境中防止ID重复。这种算法最初由Twitter开发,用于生成Twitter的唯一ID,由于其简单易懂和高效,已成为目前最常用的生成唯一ID的算法之一。可以看到,这是一种高效、易扩展、高可用的算法,适合于生成分布式系统下唯一的ID。在以上示例代码中,SnowFlake类的构造函数接收数据中心ID和机器ID作为参数,用户可以根据自己的业务需求设置不同的数值。_java雪花算法生成id

linux c语言实现断点续传_linux c语言断点-程序员宅基地

文章浏览阅读451次,点赞7次,收藏7次。【代码】linux c语言实现断点续传。_linux c语言断点

PhpExcel中文帮助手册|PhpExcel使用方法(转)-程序员宅基地

文章浏览阅读318次。面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的创建一个excel$objPHPExcel = new PHPExcel();保存excel—2007格式$objWriter = new P..._php 操作phpexcel 转中文

随便推点

VS2019 创建C语言项目_vs2019怎么创建c语言项目-程序员宅基地

文章浏览阅读7.5k次,点赞6次,收藏24次。VS2019 C语言项目的创建_vs2019怎么创建c语言项目

golang gin使用gorm+mysql 实现增加 删除更新 查询_golang gin以及gorm连接mysql实现单表的增删改查-程序员宅基地

文章浏览阅读1.3k次。核心代码package mainimport ( "fmt" "github.com/gin-gonic/gin" "gorm.io/driver/mysql" "gorm.io/gorm" "net/http" "time")type Product struct { Id int `gorm:"primaryKey;autoIncrement" json:"id"` Number string `gorm:"uniqu_golang gin以及gorm连接mysql实现单表的增删改查

J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用-程序员宅基地

文章浏览阅读4.4w次,点赞3次,收藏4次。Hibernate封装了对数据库的例行操作,比单纯的jdbc的DAO,开发效率要高很多了。提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。结合struts2的事件过滤规则,需要添加额外的参数,但是这又与POST的提交方式相违背(POST与GET提交方式的区别,详见博文《的操作对象,然后利用此对象进行,保存,修改和删除等操作,此方法是在配置了。经查看代码,发现果然是数据库中userId为空导致问题的出现。...

1.c语言的基本框架,C语言基本程序框架-程序员宅基地

文章浏览阅读5.7k次。C语言基本程序框架第一部分 编译预处理“编译预处理”以“#”开头,其作用是为后面的函数做准备工作的。第二部分 函数组函数组中必须包括一个main()主函数,且C语言程序中有且仅有一个主函数,整个程序的执行从主函数开始,以主函数为核心展开。主函数+库函数用户+自定义函数在程序中允许为程序添加注释,以增强程序的可读性。在 Visua/ C++编程环境中,可用“//”作为程序单行注释的起始符号,或使用“...

linux配置snmp v2_snmpwalk v2-程序员宅基地

文章浏览阅读7.8k次。转载自:http://blog.chinaunix.net/uid-451-id-3337559.html1 安装常用工具用包安装就行了yum install net-snmp-utils net-snmpchkconfig snmpd on2 配置snmpdvi /etc/snmp/snmpd.confrocommunity publicrwcom_snmpwalk v2

超全!40000字 Matplotlib 实战-程序员宅基地

文章浏览阅读294次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达导读Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。以下内容来自「Github」,为《PythonDataScienc...