我正在寻找最佳解决方案来生成(在OpenCV中)一个矩阵(2xN)的随机数,其均值为0,方差为1,就像Matlab中的函数 randn()一样。
OpenCV库中有一个randn()
函数,但我不知道如何将参数传递给此函数以生成平均值为0且方差为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中的通道数。