随机发生器 (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);
}
}
参考资料
网友评论