0
点赞
收藏
分享

微信扫一扫

Qt+OpenCV联合开发(十七)--随机数与随机颜色

雪域迷影 2022-02-02 阅读 89

一、随机数及RNG类

1、c\c++\opencv中的随机数

我们在编程中经常用到随机数,特别在进行初始化的时候需要赋一些随机值。C和C++中产生随机数的方法如rand()、srand()等,在OpenCV中仍可以用。此外,OpenCV还特地编写了C++的随机数类RNG,C的随机数类CvRNG

2、RNG

      RNG类是opencv里C++的随机数产生器。它可产生一个64位的int随机数。目前可按均匀分布和高斯分布产生随机数。随机数的产生采用的是Multiply-With-Carry算法和Ziggurat算法。

2.1产生一个随机数

2.2 返回下一个随机数

上面一次只能返回一个随机数,实际上系统已经生成一个随机数组。如果我们要连续获得随机数,没有必要重新定义一个RNG类,只需要取出随机数组的下一个随机数即可。

 二、函数原型

uniform函数:

三、实现效果

1、线段动态生成并叠加

2、线段动态生成不叠加,每次进行檫除画板

 3、加上动态矩形和圆形

四、代码

//随机数与随机颜色
void test1::random_drawing()
{
    Mat pline = Mat::zeros(Size(512,512),CV_8UC3);
    int w = pline.cols;
    int h = pline.rows;
    RNG rng(12345);//12345是产生随机数的种子
    while(true)
    {
        int c = waitKey(10);
        if(c == 27)//esc退出
        {
            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);
        pline=Scalar(0,0,0);
        line(pline,Point(x1,y1),Point(x2,y2),Scalar(b,g,r),1,LINE_AA,0);//LINE_AA反锯齿
        imshow("random_drawing",pline);
    }

}
举报

相关推荐

0 条评论