W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
在本教程中,您將學(xué)習(xí)如何:
RNG rng( 0xFFFFFFFF );
RNG實(shí)現(xiàn)一個隨機(jī)數(shù)生成器。在本例中,rng是以0xFFFFFFFF值初始化的RNG元素
Mat image = Mat :: zeros(window_height,window_width,CV_8UC3);
imshow(window_name,image);
c = Drawing_Random_Lines(image,window_name,rng);
if(c!= 0)return 0;
c = Drawing_Random_Rectangles(image,window_name,rng);
if(c!= 0)return 0;
c = Drawing_Random_Ellipses(image,window_name,rng);
if(c!= 0)return 0;
c = Drawing_Random_Polylines(image,window_name,rng);
if(c!= 0)return 0;
c = Drawing_Random_Filled_Polygons(image,window_name,rng);
if(c!= 0)return 0;
c = Drawing_Random_Circles(image,window_name,rng);
if(c!= 0)return 0;
c = Displaying_Random_Text(image,window_name,rng);
if(c!= 0)return 0;
c = Displaying_Big_End(image,window_name,rng);
所有這些功能都遵循相同的模式,因此我們將僅分析其中的一些功能,因?yàn)橥瑯拥慕忉屵m用于所有的功能。
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;
}
pt1.x = rng.uniform(x_1,x_2);
pt1.y = rng.uniform(y_1,y_2);
randomColor(RNG)
我們來看看功能的實(shí)現(xiàn):
static Scalar randomColor( RNG& rng )
{
int icolor = (unsigned) rng;
return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
}
我們可以看到,返回值是具有3個隨機(jī)初始化值的標(biāo)量,它被用作線顏色的R,G和B參數(shù)。因此,線條的顏色也是隨機(jī)的!
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(x_1, x_2);
org.y = rng.uniform(y_1, y_2);
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);
imshow( window_name, image );
if( waitKey(DELAY) >= 0 )
{ return -1; }
}
return 0;
}
一切看起來很熟悉,但表達(dá)式:
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);
那么函數(shù)cv :: putText是做什么的呢?在我們的例子中:
因此,我們將在隨機(jī)位置獲得(分析其他繪圖功能)NUMBER個文本在我們的圖像上。
int Displaying_Big_End( Mat image, char* window_name, RNG rng )
{
Size textsize = getTextSize("OpenCV forever!", FONT_HERSHEY_COMPLEX, 3, 5, 0);
Point org((window_width - textsize.width)/2, (window_height - textsize.height)/2);
int lineType = 8;
Mat image2;
for( int i = 0; i < 255; i += 2 )
{
image2 = image - Scalar::all(i);
putText( image2, "OpenCV forever!", org, FONT_HERSHEY_COMPLEX, 3,
Scalar(i, i, 255), 5, lineType );
imshow( window_name, image2 );
if( waitKey(DELAY) >= 0 )
{ return -1; }
}
return 0;
}
除了函數(shù)getTextSize(獲取參數(shù)文本的大?。┲?,我們可以觀察到的新操作在foor循環(huán)中:
image2 = image - Scalar :: all(i)
所以,image2是圖像和Scalar :: all(i)的減法。事實(shí)上,這里發(fā)生的一切是,image2的每個像素都將減去圖像的每個像素減去i的值(記住,對于每個像素,我們考慮三個值,如R,G和B,因此每個像素會受到影響)
還要記住,減法運(yùn)算總是在內(nèi)部執(zhí)行飽和運(yùn)算,這意味著獲得的結(jié)果將始終在允許的范圍內(nèi)(對于我們的示例,不會為負(fù)值,在0到255之間)。
正如您剛才在“代碼”部分所看到的,程序?qū)⒁来螆?zhí)行不同的繪圖功能,這將產(chǎn)生:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: