opencv学习日常之随机数发生器RNG

Random Number Generator(随机数发生器对象)RNG

RNG rng( 0xFFFFFFFF)

RNG实现了一个随机数发生器。 在上面的例子中, rng 是用数值 0xFFFFFFFF 来实例化的一个RNG对象。
下面通过opencv绘图功能来了解RNG
代码:

#include<opencv2/opencv.hpp>
#include <iostream>

#define window_height 500
#define window_width 500
#define NUMBER 100

using namespace cv;

int DrawRandomLines(Mat img,char *windowname,RNG rng);
int Displaying_Random_Text( Mat image, char* window_name, RNG rng );


void main()
{
    Mat img=Mat::zeros(window_width,window_height,CV_8UC3);
    RNG rng(0xFFFFFFFF);    
    DrawRandomLines(img,"lines",rng);
    Displaying_Random_Text(img,"text",rng);

}

int DrawRandomLines( Mat img,char *windowname,RNG rng )
{
    int linetype = 8;
    Point pt1,pt2;
    for (int n=0;n<NUMBER;n++)
    {
        pt1.x = rng.uniform(1,500);
        pt1.y = rng.uniform(1,500);
        pt2.x = rng.uniform(1,500);
        pt2.y = rng.uniform(1,500);
        line(img,pt1,pt2,Scalar(rng.uniform(1,255),rng.uniform(1,255),rng.uniform(1,255)),rng.uniform(1,10),linetype);
        imshow(windowname,img);
        if (waitKey(300)>0)
        {
            return -1;
        }
    }   
    return 0;

}

int Displaying_Random_Text( Mat image, char* window_name, RNG rng )
{
    int lineType = 8;

    for ( int i = 1; i < NUMBER; i++ )
    {
        Point org;
        org.x = rng.uniform(1,500);
        org.y = rng.uniform(1,500);

        putText( image, "lifang", org, rng.uniform(0,8),
            rng.uniform(0,100)*0.05+0.1, Scalar(rng.uniform(1,255),rng.uniform(1,255),rng.uniform(1,255)), rng.uniform(1, 10), lineType);

        imshow( window_name, image );
        if( waitKey(300) >= 0 )
        { return -1; }
    }
    //destroyWindow(window_name);
    return 0;
}

我们来分析分析函数int DrawRandomLines( Mat img,char *windowname,RNG rng )
我们可以看到:

for 循环将重复 NUMBER 次。 并且函数 line 在循环中, 这意味着要生成 NUMBER 条线段。

线段的两个端点分别是 pt1 和 pt2. 对于 pt1 我们看到:

pt1.x = rng.uniform( 1, 500);
pt1.y = rng.uniform( 1, 500);

我们知道 rng 是一个 随机数生成器 对象。在上面的代码中我们调用了 rng.uniform(a,b) 。这指定了一个在 a 和 b 之间的均匀分布(包含 a, 但不含 b)。

由上面的说明,我们可以推断出 pt1 和 pt2 将会是随机的数值,因此产生的线段是变幻不定的,这会产生一个很好的视觉效果(从下面绘制的图片可以看出)。

我们还可以发现, 在 line 的参数设置中,对于 color 的设置我们用了:

Scalar(rng.uniform(1,255),rng.uniform(1,255),rng.uniform(1,255))

所欲线段的颜色也是随机的。

运行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值