用OpenCV實現隨機發生器與文字

2021-07-09 14:11:52 字數 4768 閱讀 1351

目標

學習使用隨機數發生器類(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...