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

Jan*_*ska 6 matlab opencv

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

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

Bul*_*ull 12

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

Matlab的:

matrix2xN = randn(2,N)
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

要么

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);
Run Code Online (Sandbox Code Playgroud)

在内部,OpenCV实现了randn()使用RNG.使用的缺点randn()是你失去了对种子的控制.

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