gpt4 book ai didi

c++ - 为什么每次RNG的结果都一样?

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:28 25 4
gpt4 key购买 nike

我对 RNG 类有疑问。我想从给定的图像中随机获取不同的点,所以我使用 RNG class这是 OpenCV 文档中推荐的。代码是:

struct SingleAnt
{
int row;
int col;
};
void initializeAnts( SingleAnt *ants, Mat *sourceImage )
{
RNG rng( 0xFFFFFFFF );
int imgWidth = sourceImage->cols;
int imgHight = sourceImage->rows;

for( int index = 0; index < ANTSNUMBER; index++ ) {
ants[ index ].col = rng.uniform( 0, imgWidth );
ants[ index ].row = rng.uniform( 0, imgHight );
}
}

但是,当我运行这段代码时,每次都会得到相同的结果。代码中有错误吗?

最佳答案

RNG rng( 0xFFFFFFFF );

您在这里(大概)提供了 PRNGseed value - 特别是每次代码运行时相同种子值(0xFFFFFFFF)。因此,PRNG(作为一种完全确定性的算法)每次都会提供相同的输出值序列。

相反,您应该为其提供一个伪随机种子值。通常,系统 time() 值用于播种 PRNG。很多时候,为 PRNG 调用无参数构造函数实际上会为您做到这一点。

作为B... points out , cv::RNG 类确实有一个无参数构造函数:cv::RNG::RNG() ,但它不会生成生成器。来自documentation , RNG::RNG()

sets the state to some pre-defined value, equal to 2**32-1 in the current implementation

所以正如我之前建议的那样,您应该自己播种。

关于c++ - 为什么每次RNG的结果都一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com