OpenCV:像matlab一样的randn()生成器

时间:2013-09-26 19:38:32

标签: matlab opencv

我正在寻找最佳解决方案来生成(在OpenCV中)一个矩阵(2xN)的随机数,其均值为0,方差为1,就像Matlab中的函数 randn()一样。

OpenCV库中有一个randn()函数,但我不知道如何将参数传递给此函数以生成平均值为0且方差为1的数字。

1 个答案:

答案 0 :(得分:12)

OpenCV有一个randn()函数和一个RNG类。下面是您可能要替换的Matlab代码,以及等效的OpenCV代码。

<强> Matlab的:

matrix2xN = randn(2,N)

<强>的OpenCV:

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1);
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1);
cv::RNG rng(optional_seed);
cv::Mat matrix2xN(2,N,CV_64FC1);
rng.fill(matrix2xN, cv::RNG::NORMAL, mean, sigma);

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1);
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1);
cv::randn(matrix2xN,  mean, sigma);

在内部,OpenCV使用randn()实现RNG。使用randn()时的缺点是您无法控制种子。

如果matrix2xN以上有多个频道,则每个频道使用不同的均值/西格玛。在这种情况下,您需要在mean和xigma中添加行数(或cols)以匹配matrix2xN中的通道数。