OpenCV(cv::RNG、cv::theRNG())



在 OpenCV 中,cv::RNGcv::theRNG() 是用于随机数生成的工具,常用于图像处理、计算机视觉中的数据生成、扰动操作等。

1. cv::RNG

cv::RNG 是一个用于生成随机数的类(Random Number Generator)。它封装了随机数生成的常见操作,支持各种不同的分布形式(均匀分布、正态分布等)。

1.1 构造函数

cv::RNG::RNG(uint64 seed = 0);
  • seed: 随机数生成器的种子值。使用相同的种子值可以保证生成的随机数序列一致。默认种子值为 0,这意味着随机数生成器将自动生成一个种子。

1.2 常用方法

  • int operator()(): 生成一个随机整数。
  • double uniform(double a, double b): 生成在范围 [a, b) 内的均匀分布随机数。
  • float uniform(float a, float b): 生成在范围 [a, b) 内的均匀分布随机数(浮点数)。
  • int uniform(int a, int b): 生成在范围 [a, b) 内的均匀分布随机数(整数)。
  • double gaussian(double sigma): 生成以 0 为均值,sigma 为标准差的正态分布随机数。

1.3 示例

cv::RNG rng; // 创建一个随机数生成器对象
int rand_int = rng(); // 生成一个随机整数
double rand_uniform = rng.uniform(0.0, 1.0); // 生成一个 [0, 1) 内的均匀分布随机数
double rand_gaussian = rng.gaussian(1.0); // 生成一个标准差为 1 的正态分布随机数


2. cv::theRNG()

cv::theRNG() 是一个全局函数,返回 OpenCV 库内置的全局随机数生成器。这个函数提供了一个单例模式的 RNG 对象,便于用户在整个程序中使用一致的随机数生成器。

2.1 使用方式

cv::RNG& rng = cv::theRNG(); // 获取全局随机数生成器
int rand_int = rng(); // 生成一个随机整数
double rand_uniform = rng.uniform(0.0, 1.0); // 生成一个 [0, 1) 内的均匀分布随机数

cv::theRNG() 返回一个 cv::RNG 类型的引用,之后你可以使用 cv::RNG 类的所有方法进行随机数的生成。它提供了一个方便的方法来确保整个应用程序中的随机数生成具有一致性。

2.2 全局随机数生成器的优点

使用 cv::theRNG() 提供的全局随机数生成器有以下优点:

  • 一致性:在应用程序的不同部分使用相同的随机数生成器,有助于确保生成的随机数序列在不同操作之间一致。
  • 简洁性:避免创建多个 cv::RNG 实例,使代码更加简洁。
  • 控制种子:你可以通过 cv::theRNG().state = seed; 来设置全局种子,以控制随机数的生成。

2.3 示例

cv::RNG& rng = cv::theRNG(); // 使用全局随机数生成器
rng.state = 12345; // 设置随机种子
int rand_int = rng(); // 生成随机整数
double rand_uniform = rng.uniform(0.0, 1.0); // 生成均匀分布的随机数

3. 总结

  • cv::RNG 是 OpenCV 中的随机数生成类,允许生成均匀分布、正态分布等随机数。
  • cv::theRNG() 是一个全局函数,用于访问全局随机数生成器,便于在整个应用中使用一致的随机数生成逻辑。


posted @   做梦当财神  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2021-08-23 数据降维
点击右上角即可分享
微信分享提示