opencv中产生随机数的类CvRNG,以及C++底层随机数方法
2016-01-27 15:28
501 查看
近期做图像检测时用到的获取随机数的方法,以及遇到的一些问题。
操作背景:在一张大的背景图上获取n个随机矩阵,提取这些矩阵区域小图像的特征值,依次进行分类器处理分类。
首先使用opencv封装类CvRNG
而在release版本下就出现了如下的问题,随机产生的1000个矩形区域只有左上角一个,也就是说1000个重叠了,至今不知道原因
在release版本下调试出现了不想得到的结果,所以只能换方法。采用c++的获取随机数的方法srand和rand(),代码如下:
操作背景:在一张大的背景图上获取n个随机矩阵,提取这些矩阵区域小图像的特征值,依次进行分类器处理分类。
首先使用opencv封装类CvRNG
//获取随机矩形,opencv中封装的随机类CvRNG ///////////////////////////////////////////////////////////////// //出现问题:debug和release版本下的结果不一样,release下木有随机产生 void getRects_random_RNG(Mat in_img, vector<CvRect>& rects_vec) { CvRNG rng; //随机数产生类 CvSize size = in_img.size(); int X = in_img.rows; int Y = in_img.cols; for (int i = 0; i < 1000; i++) { //int num; //cvRandInt(&rng)%num; //如果%num,出来的将会是0-(num-1)的正整数 int d_s = (cvRandInt(&rng) % 60) + 40; //rng.uniform((double)40, (double)100); // [40 ,100)的随机数 int d_x = cvRandInt(&rng) % (X - d_s); int d_y = cvRandInt(&rng) % (Y - d_s); CvRect rect = cvRect(d_x, d_y, d_s, d_s); rects_vec.push_back(rect); } }在debug版本下
而在release版本下就出现了如下的问题,随机产生的1000个矩形区域只有左上角一个,也就是说1000个重叠了,至今不知道原因
在release版本下调试出现了不想得到的结果,所以只能换方法。采用c++的获取随机数的方法srand和rand(),代码如下:
void getRects_random(Mat in_img, vector<CvRect>& rects_vec) { srand((int)time(0)); /////////// int X = in_img.cols; int Y = in_img.rows; for (int i = 0; i < 1000; i++) { int d_s = (rand() % 60) + 41; // (40 ,100]的随机数 int d_x = rand() % (X - d_s); int d_y = rand() % (Y - d_s); CvRect rect = cvRect(d_x, d_y, d_s, d_s); rects_vec.push_back(rect); } }结果与第一张图一样,且在debug和release下一样,至此完成。
相关文章推荐
- C语言中随机数相关问题
- 关于c++悬垂指针的问题
- C语言的数据类型
- C++四种强制类型转换运算符的联系与区别
- [译]C++, Java和C#的编译过程解析
- C++面试(二)
- Codeforces Round #339 (Div. 2) C.cpp
- C/C++中的值传递,引用传递,指针传递,指针引用传递
- struct/union内存对齐
- c++学习笔记,void*及全局变量
- 20120824 profile location程序编写中c++总结
- 20121017c++学习笔记,文件读取,字符串相关
- C++中引用传递与指针传递的区别
- 经典hash算法比较和C语言实现
- 插入排序算法的实现
- USACO : Humble Numbers (丑数)
- C语言字符串长度
- 关于c语言结构体内存对齐有感
- 解决C/C++ 头文件相互包含 问题的方法
- C++析构函数为什么要为虚函数