隨機(jī)發(fā)生器 (RNG全稱Random number generator)
通過隨機(jī)發(fā)生器(RNG)生成得到均勻分布的隨機(jī)數(shù)。
代碼與解析(畫圓為例)
(1)首先生成一個(gè)Random Number Generator對(duì)象(RNG):
// 用數(shù)值 0xFFFFFFFF 來實(shí)例化的一個(gè)RNG對(duì)象
RNG rng(0xFFFFFFFF);
(2)創(chuàng)建一個(gè)空?qǐng)D像
Mat image = Mat::zeros(self.view.bounds.size.width, self.view.bounds.size.height, CV_8SC3);
(3)調(diào)用畫圓的方法
drawingRandomCircle(image, rng);
(4)畫圓的實(shí)現(xiàn)方法(注意 :這里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函數(shù)的實(shí)現(xiàn) :
// 該函數(shù)返回 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);
代碼調(diào)用
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);
實(shí)現(xiàn)效果
繪制橢圓的方法
void drawingRandomEllipses(Mat& image,RNG rng)
{
// 線形
int ellipses_lineType = 8;
// 創(chuàng)建像素點(diǎn),這個(gè)用來存放弧線的中心位置
cv::Point point;
// 這個(gè)用來存放弧線的長軸和短軸的大小
cv::Size size;
// 這里的number是全局int常量,表示繪制number條弧線
for (int i = 0; i < number; i++) {
// 隨機(jī)生成弧線的中心點(diǎn)(x,y)
point.x = rng.uniform(1, 501);
point.y = rng.uniform(1, 501);
// 隨機(jī)生成弧線長短軸(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);
}
}
參考資料