一、知识点
1、RNG
(1)、随机数生成器。
(2)、该类具有返回标量随机值和用随机值填充数组的方法。
(3)、RNG()
默认构造函数,以系统时间为种子。
(4)、RNG(uint64 state)
有参构造函数,指定随机数的种子为state。 使用相同的种子值可以保证生成的随机数序列一致。
(5)、int uniform(int a, int b)
随机生成[a, b)范围内的均匀分布的随机整数。
(6)、float uniform(float a, float b)
随机生成[a, b)范围内的均匀分布的随机浮点数。
(7)、double uniform(double a, double b)
随机生成[a, b)范围内的均匀分布的随机双精度浮点数。
(8)、double gaussian(double sigma)
生成以0为均值,sigma为标准差的正态分布的随机数。
二、示例代码
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat canvas = cv::Mat::zeros(cv::Size(512, 512), CV_8UC3);
int w = canvas.cols;
int h = canvas.rows;
//随机数生成器
cv::RNG rng(12345);
while (true)
{
int c = cv::waitKey(50);
if (c == 27)
{
break;
}
//随机生成的位置
int x1 = rng.uniform(0, w);
int y1 = rng.uniform(0, h);
int x2 = rng.uniform(0, w);
int y2 = rng.uniform(0, h);
//随机生成的颜色
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
//每次只随机绘制一条线
canvas = cv::Scalar(0, 0, 0);
cv::line(canvas, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(b, g, r), 1, cv::LINE_AA, 0);
//注意: 因人眼捕捉东西的时间间隔约300ms, 而系统约50ms就画一道线,所以视觉上好像是几条线同时出现在屏幕上
cv::imshow("随机数与随机颜色", canvas);
}
return 0;
}