OpenCV中的Rand随机数函数簇学习

OpenCV生成随机矩阵---randn与randu OpenCV中提供了两个函数来生成随机数矩阵,可以用来创建随机图像或是用来人为增加随机噪点。 阅读详情

因为学习卡尔曼滤波,所以发现了OpenCV居然还能发生随机数的。特意把随机数函数簇拿出来学习下。

注:正态分布曲线的对称轴是正态样本的平均值;样本的平均值增大,曲线向右侧平移,样本的平均值减小,曲线向左侧平移。

正态样本的标准差越大,则正态分布曲线越平坦,峰值越小。

RandInit

Initializes random number generator state

void cvRandInit( CvRandState* state, double param1, double param2, int seed,
int distType=CV_RAND_UNI );
state
Pointer to the initialized random number generator state structure. 传入结构CvRandState,必须,
param1
The first distribution parameter. In case of uniform distribution it is the inclusive lower boundary of random numbers range. In case of normal distribution it is the standard deviation of random numbers.
在平均分布是下限,在正态分布是标准差
param2
The second distribution parameter. In case of uniform distribution it is the exclusive upper boundary of random numbers range. In case of normal distribution it is the mean value of random numbers.
在平均分布是上限,正态分布是平均值
seed
Initial 32-bit value to start a random sequence.
种子数,可以用+-1代替,也可以用GetTickCount()代替。
distType
Distribution type:
CV_RAND_UNI - uniform distribution 平均分布
CV_RAND_NORMAL - normal or Gaussian distribution 正态分布,高斯分布

The function cvRandInit initializes the state structure that is used for generating uniformly distributed numbers in the range [param1, param2) or normally distributed numbers with param1 mean and param2 standard deviation. The parameters are set for all the dimensions simultaneously - resemble that RNG has separate parameters for each of 4 dimensions. A multiply-with-carry generator is used.

RandSetRange RandInit用于设置全局,可以指定其中的一个通道用其它的方式发生随机数。可见Rand可以发生N个通道的CvArr*

Changes the range of generated random numbers without touching RNG state

void cvRandSetRange( CvRandState* state, double param1, double param2, int index=-1 );
state
State of random number generator (RNG).
param1
New lower boundary/deviation of generated numbers.
param2
New upper boundary/mean value of generated numbers.
index
The 0-based index of dimension/channel for which the parameter are changed, -1 means changing the parameters for all dimensions.

The function cvRandSetRange changes the range of generated random numbers without reinitializing RNG state. It is useful if a few arrays of different types need to initialized with random numbers within a loop. Alternatively, you may have a separate generator for each array, but then you should provide several uncorrelated initialization seeds - one per each generator.

 

Rand 发生随机数到CVArr* cvbRand产生随机数到数组[]

Fills array with random numbers and updates the RNG state

void cvRand( CvRandState* state, CvArr* arr );
state
RNG state initialized by RandInit and, optionally, customized by RandSetRange .
arr
The destination array.

The function cvRand fills the destination array with uniformly or normally distributed random numbers within the pre-set range and updates RNG state. In the sample below this and two functions above are used to put a few normally distributed floating-point numbers to random locations within a 2d array

/* let's noisy_screen be the floating-point 2d array that is to be "crapped" */
CvRandState rng_state;
int i, pointCount = 1000;
/* allocate the array of coordinates of points */
CvMat* locations = cvCreateMat( pointCount, 1, CV_32SC2 );
/* array of random point values */
CvMat* values = cvCreateMat( pointCount, 1, CV_32FC1 );
CvSize size = cvGetSize( noisy_screen );

cvRandInit( &rng_state,
0, 1, /* use dummy parameters now and adjust them further */
0xffffffff /* just use a fixed seed here */,
CV_RAND_UNI /* specify uniform type */ );

/* customize the RNG to use it for initialiazing locations:
the 0-th dimension is used for x's and the 1st - for y's */
cvRandSetRange( &rng_state, 0, size.width, 0 );
cvRandSetRange( &rng_state, 0, size.height, 1 );

/* initialize the locations */
cvRand( &rng_state, locations );

/* modify RNG to make it produce normally distributed values */
rng_state.disttype = CV_RAND_NORMAL;
cvRandSetRange( &rng_state,
30 /* deviation */,
100 /* average point brightness */,
-1 /* initialize all the dimensions */ );
/* generate values */
cvRand( &rng_state, values );

/* set the points */
for( i = 0; i < pointCount; i++ )
{
CvPoint pt = *(CvPoint*)cvPtr1D( locations, i, 0 );
float value = *(float*)cvPtr1D( values, i, 0 );
cvSetReal2D( noisy_screen, pt.y, pt.x, value );
}

/* not to forget to release the temporary arrays */
cvReleaseMat( &locations );
cvReleaseMat( &values );

/* cvRandInit does not allocate any memory, so there is no need
(and no function) to deinitialize it */


RandNext 产生单个随机数

Returns 32-bit unsigned integer and updates RNG

unsigned cvRandNext( CvRandState* state );

state
RNG state initialized by RandInit and, optionally, customized by RandSetRange (though, the latter function does not affect on the discussed function outcome).

The function cvRandNext returns uniformly-distributed (regardless of the RNG distribution type settings) "plain" integer random number and updates RNG state. It is similar to rand() function from C runtime library, but it always generates 32-bit number whereas rand() returns a number in between 0 and RAND_MAX which is 2**16 or 2**32, depending on the platform.

The function is useful for generating scalar random numbers, such as points, patch sizes, table indices etc, where integer numbers of a certain range can be generated using modulo operation and floating-point numbers can be generated by scaling to 0..1 of any other specific range. Here is the example from the previous function discussion rewritten using cvRandNext :

/* the input and the task is the same as in the previous sample. */ CvRandState rng_state; int i, pointCount = 1000; /* ... - no arrays are allocated here */ CvSize size = cvGetSize( noisy_screen ); /* make a buffer for normally distributed numbers to reduce call overhead */ #define bufferSize 16 float normalValueBuffer[bufferSize]; CvMat normalValueMat = cvMat( bufferSize, 1, CV_32F, normalValueBuffer ); int valuesLeft = 0; /* initialize RNG to produce normally distributed values. Coordinates will be uniformly distributed within 0..2**32 anyway as they are generated using cvRandNext */ cvRandInit( &rng_state, 100, 30, 0xffffffff /* just use a fixed seed here */, CV_RAND_NORMAL /* specify uniform type */ ); for( i = 0; i < pointCount; i++ ) { CvPoint pt; /* generate random point */ pt.x = cvRandNext( &rng_state ) % size.width; pt.y = cvRandNext( &rng_state ) % size.height; if( valuesLeft <= 0 ) { /* fulfill the buffer with normally distributed numbers if the buffer is empty */ cvRand( &rng_state, &normalValueMat ); valuesLeft = bufferSize; } cvSetReal2D( noisy_screen, pt.y, pt.x, normalValueBuffer[--valuesLeft]); } /* there is no need to deallocate normalValueMat because we have both the matrix header and the data on stack. It is a common and efficient practice of working with small, fixed-size matrices */


OpenCV-Python实战(6)——OpenCV中的色彩空间和色彩映射 为了更好的表示色彩,人们建立了多种色彩模型以一维、二维、三维等坐标系来描述不同色彩,这种坐标系所能定义的色彩范围即色彩空间;而色彩映射是将图像在一个色彩空间映射至另一色彩空间的操作,通常可以将灰度图像着色为等效的伪色彩图像。本文将介绍OpenCV中的色彩空间和色彩映射,并进行实战以应用。 阅读详情

相关推荐

【硬件设计】_基于STM32单片机的智能台灯系统

智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。

2401_85381181的博客 1730

OpenCV中的随机数与随机种子

我们先从在C/C++中的随机数与随机种子说起。 rand()、srand() rand()可以生成一个0~RAND_MAX之间的一个随机数,返回值是一个unsigned int类型值。rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用...

Young_Fan 2208

COMSOL新手必看:锂电池仿真从入门到精通的5个实战案例(附模型文件)

本文为COMSOL新手提供锂电池仿真的5个实战案例,涵盖锂枝晶生长模拟、电池热失控预警、SOC估计等效电路模型、电池组液冷系统热管理及SOH衰退模型构建。通过详细步骤和参数设置,帮助用户快速掌握锂电池仿真技术,提升新能源研发效率。附模型文件可直接应用。

wdx01234567的博客 260

rand函数生成的随机数范围_【从零学习OpenCV 4】图像噪声的种类与生成

本文首发于“小白学视觉”微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。图像在获取或者传输过程中会受到随机信号的干扰产生噪声,例如电阻引起的热...

weixin_39718173的博客 451

从Podfile到分享成功:ShareSDK小红书模块集成全流程实战(附视频分享代码)

本文详细介绍了iOS应用如何通过ShareSDK集成小红书分享功能的全流程,包括环境配置、SDK初始化、图片和视频分享实现,以及常见问题排查和性能优化策略。特别针对视频分享这一高频需求场景,提供了完整的代码示例和实战技巧,帮助开发者快速实现社交分享功能。

weixin_42540248的博客 226

webrtc获取IceCandidate流程

foundation:用于唯一标识候选者的基础信息,通常是基于候选者的类型、IP地址、协议和replay协议计算出的字符串。component:标识候选者所属的传输组件。对于RTP流,通常使用1;对于RTCP流,通常使用2。protocol:候选者使用的传输协议,通常是UDP,但也可以是TCP(尽管在WebRTC中UDP更为常见)。priority:候选者的优先级,用于在选择最佳候选对时进行比较。优先级的计算公式考虑了候选类型优先级、本地优先级和组件ID。address:候选者的IP地址。port。

qq_42805085的博客 1900

opencv rand函数

关于rand()的用法求解释 由 AngleLove » 2011-08-06 17:40 我知道int rand(void)返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。但是有句代码我还是不懂,急求解释! 代码如下: cvScalar color =

canlan818的专栏 4123

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

PPT里全是文字且很拥挤怎么办?本篇教你使用7种不同的排版让你的PPT瞬间变得高大上起来。

打造全国最全的AI Agent开发知识领域的博客 5021

学习OpenCV2——产生随机数

本文详细介绍了OpenCV中随机数的用法

Markala的博客 2万+

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2232

18、社区多能源管理与点对点能源交易优化调度策略研究

本文研究了社区多能源管理与点对点(P2P)能源交易的优化调度策略,构建了适用于单一社区多个产消者的P2P交易模型,以用户生产成本最小化为目标,设计了基于ADMM算法的迭代优化方法。通过电热联合调度与能源共享机制,结合光伏、热电联产(CHP)和储能系统(ESS),实现了用户侧能源的高效利用。仿真结果表明,引入P2P交易和CHP设备显著降低了用户能源成本,提高了电力自给率和天然气利用率,减少了对主电网的依赖。研究验证了ADMM算法在分布式优化中的有效性,为未来社区能源系统的智能化管理提供了理论支持和技术路径。

git9versioner的博客 70

OpenCV 随机数

简介 产生随机数是编程中经常用到的操作,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法如rand()、srand()等在OpenCV中仍可以用。此外,OpenCV还特地编写了C++的随机数类RNG,C的随机数类CvRNG,还有一些相关的函数,使用起来更加方便。下面,一一介绍。 说明 关键字前带cv的都是C里的写法,不带cv的是C++里的写法,比如CvRNG和RNG,其本...

qq_27278957的博客 2179

ESP32 双雷达融合盲区车辆接近预警系统设计与实现

/ 超声波传感器引脚// 触发引脚// 回声引脚// 预警模块引脚// 蜂鸣器引脚// LED引脚// 串口配置(毫米波雷达用UART2)#define BAUD_RATE 115200 // 雷达串口波特率(IWR6843默认配置)// 预警阈值(可根据实际需求调整)// 高危区阈值(3m)// 预警区阈值(10m)// 传感器数据存储// 毫米波雷达距离(m)// 毫米波雷达速度(km/h)// 超声波距离(m)// 融合后距离(m)

weixin_42300449的博客 745

c++和opencv小知识:RNG随机数的超级详细解析

———————————————— 版权声明:本文为优快云博主「Markala」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/gdfsg/article/details/50830489 产生随机数是编程中经常用到的操作,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法如rand()、s...

qq_43702097的博客 5514

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

opencv中产生随机数的类CvRNG,以及C++底层随机数方法

近期做图像检测时用到的获取随机数的方法,以及遇到的一些问题。 操作背景:在一张大的背景图上获取n个随机矩阵,提取这些矩阵区域小图像的特征值,依次进行分类器处理分类。 首先使用opencv封装类CvRNG //获取随机矩形,opencv中封装的随机类CvRNG ///////////////////////////////////////////////////////////////// /

POTATO的博客 822

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Opencv中随机数

RNG 初始化随机数生成器状态 CvRNG cvRNG( int64 seed=-1 ); seed64-bit 的值用来初始化一个随机序列 函数 cvRNG 初始化随机数生成器并返回其状态。指向这个状态的指针可以传递给函数 cvRandInt, cvRandReal 和 cvRandArr . 在通常的实现中使用一个 multiply-with-carry generato...

Joanne0106的博客 211

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++产生各种随机数

      c++产生随机数 本博客主要内容包括: 1. rand()函数; 2.std库的default_random_eigine类; 3.OpenCV库。   1. rand()函数产生float随机数 #include <stdlib.h> srand((unsigned int)time(0));//随机种子,不要写在循环体中 int a = rand() % 1...

踏雪飞鸿的博客 1412

OpenCV函数生成随机数

利用OpenCV函数生成随机数,填充数组。主要参考OpenCV中文网站OpenCV手册    http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C    函数:RandArr #include "stdafx.h"  #include #include #inclu

peixian2003的专栏 763

C++产生随机数

此文章为转载,原文地址为:https://www.cnblogs.com/xiaokang01/p/9786751.html C++产生随机数 C++产生随机数 </h1> <div class="clear"></div> <div...

OpenCV 图像辨识的博客 483

OpenCV随机数生成

<!-- @page {margin:2cm} p {margin-bottom:0.21cm; direction:ltr; color:#000000; text-align:justify; widows:0; orphans:0} p.western {font-family:"Times New Roman",serif; font-size:1

Hard Working 3095

OpenCV中随机数的相关函数

这里书写的并不全,只是看到相关的就在这里jil

Ruby 884

OpenCV 随机数生成

参考: http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C#.E9.9A.8F.E6.9C.BA.E6.95.B0.E7.94.9F.E6.88.90 RNG 初始化随机数生成器状态 CvRNG cvRNG( int64 seed=-1 ); seed64-bit

令狐少侠 1810

np.random.rand方法在opencv中的应用

np.random.rand方法是numpy库中用于生成随机数的函数。在OpenCV中,可以使用它来随机生成图像或设置图像的像素值。例如,可以使用np.random.rand函数生成一个随机噪声图像,或者使用它来随机设置图像的某些像素值。 ...

weixin_35755562的博客 101

openCV中的随机数函数与C语言中对应函数的区别

cvRNG() 初始化随机数生成器状态。 跟一般的C语言srand()使用方法一样,要先给它一个种子,但srand()用到的是unsigned int的32位种子范围,而cvRNG()用的是64位长整数种子。初始化CvRNG资料结构,假如seed给0,它将会自动转成-1。函数 cvRNG 初始化随机数生成器并返回其状态。指向这个状态的指针可以传递给函数 cvRandInt, cvRandR

ShaderJoy 的兴趣技术杂货铺 3273

Opencv 中产生随机数种子的赋值

在编程中用到了shuij 参考: http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C#.E9.9A.8F.E6.9C.BA.E6.95.B0.E7.94.9F.E6.88.90 RNG 初始化随机数生成器状态 CvRNG cvRNG( int64 seed=-1 );

qingfenglu的专栏 1104
上一篇: [转帖]卡尔曼滤波器通俗解释 – Kalman Filter
下一篇: [转]nafxcwd.lib error LNK2005的解决方法。
darkread
博客等级 码龄25年 42粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值