目標
學習使用隨機數發生器類(rng)並從乙個均勻分布中得到乙個隨機數。
利用puttext函式來展現文字
**將使用隨機數作為繪畫的引數,並用大量的幾何圖形來組成影象。既然會隨機初始化,這個過程會使用loop來自動實現。
**在opencv的sample資料夾中(一般是%your_opencv_folder%\sources\samples\cpp\tutorial_code\core\matrix);也可以從這裡獲得;在本文最後也附上了。
解釋1.先從主函式開始看起。可看到首先做的事就是建立乙個隨機數發生器物件(rng)。
rng rng(0xffffffff)
2.然後建立了乙個初始為0的矩陣(全黑),確定了其高度、寬度和型別。
/// initialize a matrix with zeros
mat image = mat::zeros(window_height, window_width, cv_8uc3);
/// show it in a window during delay ms
imshow(window_name, image);
3.接著進行畫瘋狂道具
/// draw some lines
c = drawing _random_lines(image, window_name. rng);
if(c != 0) return
0;...
/// display text in random positoins
c = displaying_random_text(image, window_name, rng);
if(c != 0) return
0;/// displaying the big end
c = displaying_big_end(image, window_name, rng);
所有這些函式都遵循相同的模式。
4.檢視drawing_random_lines函式。
int drawing_random_lines( mat image, char* window_name, rng rng )
} return
0;}
共繪製了number條直線,因直線的繪製函式line所在**塊被迴圈了number次。
直線的端點由pt1和pt2決定,而pt1和pt2都是隨機決定的(座標值x和y都分別由函式rng.uniform(inclusive in a, exclusive b)產生)。
直線的顏色由random(rng)函式得到,其中randomcolor()的實現為
static scalar randomcolor( rng& rng )
也是隨機生成的。
5.檢視display_random_text函式:
int displaying_random_text( mat image, char* window_name, rng rng )
} return
0;}
**與前面的類似除了下面這個表示式
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);
附錄:**
/**
* @file drawing_2.cpp
* @brief ****** sample code
*/#include
#include
#include
#include
using
namespace cv;
/// global variables
const
int number = 100;
const
int delay = 5;
const
int window_width = 900;
const
int window_height = 600;
int x_1 = -window_width/2;
int x_2 = window_width*3/2;
int y_1 = -window_width/2;
int y_2 = window_width*3/2;
/// function headers
static scalar randomcolor( rng& rng );
int drawing_random_lines( mat image, char* window_name, rng rng );
int drawing_random_rectangles( mat image, char* window_name, rng rng );
int drawing_random_ellipses( mat image, char* window_name, rng rng );
int drawing_random_polylines( mat image, char* window_name, rng rng );
int drawing_random_filled_polygons( mat image, char* window_name, rng rng );
int drawing_random_circles( mat image, char* window_name, rng rng );
int displaying_random_text( mat image, char* window_name, rng rng );
int displaying_big_end( mat image, char* window_name, rng rng );
/** * @function main
*/int main( void )
/// function definitions
/** * @function randomcolor
* @brief produces a random color given a random object
*/static scalar randomcolor( rng& rng )
/** * @function drawing_random_lines
*/int drawing_random_lines( mat image, char* window_name, rng rng )
} return0;}
/** * @function drawing_rectangles
*/int drawing_random_rectangles( mat image, char* window_name, rng rng )
} return0;}
/** * @function drawing_random_ellipses
*/int drawing_random_ellipses( mat image, char* window_name, rng rng )
} return0;}
/** * @function drawing_random_polylines
*/int drawing_random_polylines( mat image, char* window_name, rng rng )
; int npt = ;
polylines(image, ppt, npt, 2, true, randomcolor(rng), rng.uniform(1,10), linetype);
imshow( window_name, image );
if( waitkey(delay) >= 0 )
} return0;}
/** * @function drawing_random_filled_polygons
*/int drawing_random_filled_polygons( mat image, char* window_name, rng rng )
; int npt = ;
fillpoly( image, ppt, npt, 2, randomcolor(rng), linetype );
imshow( window_name, image );
if( waitkey(delay) >= 0 )
} return0;}
/** * @function drawing_random_circles
*/int drawing_random_circles( mat image, char* window_name, rng rng )
} return0;}
/** * @function displaying_random_text
*/int displaying_random_text( mat image, char* window_name, rng rng )
} return0;}
/** * @function displaying_big_end
*/int displaying_big_end( mat image, char* window_name, rng )
} return
0;}
opencv隨機數發生器RNG
用opencv做演算法的朋友們肯定為隨機數煩惱過,新版本一直支援隨機數產生器啦,而且還繼續支援之前版本的c格式的函式,不過與時俱進,我這裡介紹c 的rng類。它可以壓縮乙個64位的i整數並可以得到scalar和array的隨機數。目前的版本支援均勻分布隨機數和gaussian分布隨機數。隨機數的產生...
OpenCV學習 隨機數發生器 繪製文字
opencv tutorials學習 隨機數發生器 繪製文字 學習知識點 隨機數發生器 直線 折現 矩形 圓 圓弧等的繪製 文字的顯示 分析 例項化random number generator 隨機數發生器物件 rng rng的實現了乙個隨機數發生器。在上面的例子中,rng是用數值 0xfffff...
boost 隨機數發生器
在很多應用中都需要使用隨機數。本庫力求提供乙個高效的,通用的隨機數庫。boost庫有多種隨機數生成方式。先熟悉一下各種隨機數生成器的概念。數字生成器 number generator 它是乙個函式物件,沒有引數。類似於常見的rand 均勻隨機數生成器 uniform random number ge...