RNG类
RNG类是C++中产生随机数的。它和c中的rand有异曲同工之妙。产生的都是伪随机数。随机类RNG:计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值,所以只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。pencv 里RNG类构造函数初始化为固定值后,随机种子也是固定的,所以在相同的平台环境下,编译后每次运行它,显示的随机数是一样的。
怎么解决这个问题呢?
添加头文件#include
RNG rng((unsigned)time(NULL));利用系统时间作为随机数种子,这样每次的随机数种子不同,产生的随机数也不同。
uniform函数可以返回指定范围的随机数。主要用来生成一个[a,b)范围内的指定类型一个随机数。
int uniform(int a, int b);
float uniform(float a, float b);
double uniform(double a, double b);
vector points;点向量。points[i]为点集合里面的任一点都可以。points[hull[i]]表示构成凸包边的某点(因为凸包是一个点集合最外面的点连接起来的区域)
int hullcount = (int)hull.size();//返回凸包的边数(因为只有一个凸包,而凸包是由边构成的序列,所以返回序列长度,应该返回的是边的个数)
以下是自己的理解:
查看RNG类的源代码,发现RNG类可以产生多种类型的随机数,故使用时需要指定是哪种类型的。
RNG rng;
unsigned int counter = static_cast(rng)%100+3;例如这样,才对。不然,编译器会报错。
对vector的进一步理解:
拿vector<vector>和vector举个例子:
vector<vector>和vector的区别,前者是二维数组,后者是一维数组。
在寻找轮廓函数findContours中,找到的轮廓都会存在第二个参数contours中,而首先轮廓为多个,其次轮廓是一系列点的合集,所以不难想到,使用的是二维点向量vector<vector> contours;对于寻找凸包函数convexHull函数,第一个参量为输入的二维点集,第一个参量为找到的凸包。首先point本来就由(x,y)组成,所以只需要一个一维数组,只是每个数据代表一个(x,y)。找到的凸包也是这样,凸包只有一个,一个一维数组里面存下凸包的各个边。