1. 学习目标:
目标 | OpenCV函数 |
Random Number generato(随机数生成) | RNG |
text(文本编写) | putText |
2. OpenCV理论
在本教程中,我们打算对绘图参数使用随机值。 此外,我们打算用大量的几何图形填充我们的图像。 由于我们将以随机方式初始化它们,因此该过程将是自动的并且通过使用循环来完成。
3. Code(略)
4. 代码详解
RNG rng( 0xFFFFFFFF );
初始化 rng
建一张图
Mat image = Mat::zeros( window_height, window_width, CV_8UC3 );
imshow( window_name, image );
画随机线
int Drawing_Random_Lines( Mat image, char* window_name, RNG rng )
{
int lineType = 8;
Point pt1, pt2;
for( int i = 0; i < NUMBER; i++ )
{
pt1.x = rng.uniform( x_1, x_2 );
pt1.y = rng.uniform( y_1, y_2 );
pt2.x = rng.uniform( x_1, x_2 );
pt2.y = rng.uniform( y_1, y_2 );
line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );
imshow( window_name, image );
if( waitKey( DELAY ) >= 0 )
{ return -1; }
}
return 0;
}
我们可以观察到以下内容:
for循环将重复NUMBER次。 由于函数cv :: line在此循环内,这意味着将生成NUMBER行。
极值线由pt1和pt2给出。 对于pt1,我们可以看到:
pt1.x = rng.uniform( x_1, x_2 );
pt1.y = rng.uniform( y_1, y_2 );
我们知道rng是随机数生成器对象。 在上面的代码中,我们调用rng.uniform(a,b)。 这在值a和b之间产生随 机均匀的分布( [a,b) )。
从上面的解释,我们推断极值pt1和pt2将是随机值,因此线位置将是非常不可预测的,给出了良好的视觉效果 (请查看下面的结果部分)。
作为另一个观察,我们注意到在cv :: line参数中,对于我们输入的颜色输入:
randomColor(rng); //随机颜色
Text
putText( image, "Testing text rendering", org, rng.uniform(0,8),
rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);
Result