OpenCV 随机数和随机颜色
一、知识点
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;
}