【问题标题】:How to seed randn function opencv如何播种randn函数opencv
【发布时间】:2014-02-21 07:38:21
【问题描述】:

我想播种 randn 函数,但我做不到。

srand(time(NULL));
Mat mymat = Mat::zeroes(1024,1024,CV_32F);
randn(mymat,0,1); 

它不应该给我随机的垫子,命名为mymat,谁的mean = 0,和variance = 1?但是,它在每次运行时都会给出相同的mymat

这是randn 的链接,它声称 srand 可以工作。

我尝试给出不同的数字而不是时间(NULL),但都具有相同的输出随机数。我从另一台机器上检查了同样的东西,它与第一台机器给出了相同的输出。所以播种不起作用。

谢谢,

【问题讨论】:

  • 您提供的链接说您应该调用srand() 对于该示例实现,而不是srand() 将初始化randn() 一般 .不幸的是,它并没有告诉您初始化randn() 的保证方法。

标签: c++ opencv random random-seed


【解决方案1】:

您可以使用以下 sn-p 为 OpenCV 函数设置种子:

cv::theRNG().state = seed;

多线程程序有一个微妙之处 - OpenCV 使用线程局部随机数生成器,因此您需要(重新)从同一线程设置种子。

【讨论】:

  • 我的代码不是多线程的。在main 函数中使用cv::theRNG().state = time(NULL); 是否足够?那么我可以从其他函数生成随机矩阵吗?如果是这样,它不适用于randn
  • 尝试 cv::getTickCount() 而不是 time(NULL)
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2018-12-14
  • 2015-05-10
  • 2017-03-20
相关资源
最近更新 更多