隨機發生器 (RNG全稱Random number generator)
通過隨機發生器(RNG)生成得到均勻分佈的隨機數。
程式碼與解析(畫圓為例)
(1)首先生成一個Random Number Generator物件(RNG):
// 用數值 0xFFFFFFFF 來例項化的一個RNG物件
RNG rng(0xFFFFFFFF);
(2)建立一個空影象
Mat image = Mat::zeros(self.view.bounds.size.width, self.view.bounds.size.height, CV_8SC3);
(3)呼叫畫圓的方法
drawingRandomCircle(image, rng);
(4)畫圓的實現方法(注意 :這裡rng.uniform(n, m);是表示集合[n, m)即 :
n <= rng.uniform(n, m) < m)
void drawingRandomCircle(Mat& image,RNG rng)
{
int circle_thickness = 2;
int circle_lineType = 8;
cv::Point point;
for (int i = 0; i < number; i++) {
point.x = rng.uniform(1, 600);
point.y = rng.uniform(1, 300);
int w = rng.uniform(1, 50);
cv::circle(image, point, w,randomColor(rng),circle_thickness,circle_lineType);
}
}
randomColor函式的實現 :
// 該函式返回 Scalar 型別,線條的顏色 (R, G, B)
static Scalar randomColor( RNG& rng) {
int icolor = (unsigned) rng;
returnScalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
}
繪製到圖片
imagView1.image = MatToUIImage(image);
程式碼呼叫
UIImageView *imagView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
number = 50;
[self.view addSubview:imagView1];
RNG rng(0xFFFFFFFF);
Mat image = Mat::zeros(self.view.bounds.size.width, self.view.bounds.size.height, CV_8SC3);
// drawingRandomEllipses(image, rng);// 繪製橢圓
drawingRandomCircle(image, rng);// 繪製圓
imagView1.image = MatToUIImage(image);
實現效果
繪製橢圓的方法
void drawingRandomEllipses(Mat& image,RNG rng)
{
// 線形
int ellipses_lineType = 8;
// 建立畫素點,這個用來存放弧線的中心位置
cv::Point point;
// 這個用來存放弧線的長軸和短軸的大小
cv::Size size;
// 這裡的number是全域性int常量,表示繪製number條弧線
for (int i = 0; i < number; i++) {
// 隨機生成弧線的中心點(x,y)
point.x = rng.uniform(1, 501);
point.y = rng.uniform(1, 501);
// 隨機生成弧線長短軸(a,b)
size.width = rng.uniform(1, 501);
size.height = rng.uniform(1, 501);
// 畫弧線
cv::ellipse(image, point, size, rng.uniform(0, 360), rng.uniform(0, 360), rng.uniform(0, 360), randomColor(rng),rng.uniform(1, 10),ellipses_lineType);
}
}
參考資料