关于OPENCV中使用RNG类产生随机数问题

IAR111 2013-11-28 06:38:37
最近在看OpenCV cvKmeans2()函数源代码时,遇到一个随机数问题,其中有一句RNG& rng=theRNG();产生随机数rng,不是很理解。既然是随机数,为什么程序每次运行时产生的随机数都是一样的?例如下面的程序:

#include "stdafx.h"
#include "cv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include <iostream>
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
RNG& rng=theRNG();
int random=(unsigned)rng;
double a= (double)rng;
printf("the random number:%d ,%f\n",random,a);
return 0;
}

在RNG& rng=theRNG();语句之后,每次用到rng变量的地方,会产生变化的数值,但是程序重新运行,其结果还是一样的。求高手解答!!!!

...全文
724 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 楼主 IAR111 的回复:
最近在看OpenCV cvKmeans2()函数源代码时,遇到一个随机数问题,其中有一句RNG& rng=theRNG();产生随机数rng,不是很理解。既然是随机数,为什么程序每次运行时产生的随机数都是一样的?例如下面的程序: #include "stdafx.h" #include "cv.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/core/core.hpp" #include <iostream> using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { RNG& rng=theRNG(); int random=(unsigned)rng; double a= (double)rng; printf("the random number:%d ,%f\n",random,a); return 0; } 在RNG& rng=theRNG();语句之后,每次用到rng变量的地方,会产生变化的数值,但是程序重新运行,其结果还是一样的。求高手解答!!!!
请问如何指定种子?我试了srand好像不对啊
shiter 2013-12-01
  • 打赏
  • 举报
回复
就是楼上说的,没有指定种子
relaxisland 2013-11-28
  • 打赏
  • 举报
回复
所谓的随机数序列 是 从一个成为种子的数开始通过一个公式计算来模拟随机的。 默认构造函数的是 这个种子是固定的,所以每次 都是相同的顺序。 还有另外一个带参数的构造函数,你可以指定 种子, 通常用系统时间来指定,以确保每次执行都是 不同的种子 从而得到不同的随机序列。

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧