OpenCV 随机数和随机颜色

发布于:2025-06-14 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、知识点
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;
}