OpenCV: randn()函数是否类似于Matlab中的生成器?

6
我正在寻找最好的解决方案,在OpenCV中生成一个2xN的随机矩阵,均值为0,方差为1,就像Matlab中的randn()函数一样。
在OpenCV库中有一个randn()函数,但我不知道如何传参数给这个函数,以生成均值为0,方差为1的随机数。
1个回答

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使用RNG来实现randn()。使用randn()的缺点是您失去了对种子的控制。

如果上面的matrix2xN有多个通道,则每个通道都会使用不同的均值/方差。在这种情况下,您需要增加均值和方差中的行数(或列数),以匹配matrix2xN中通道的数量。


感谢您的回答。+1。另外,API设计中似乎有些浪费,需要指定一个只有一个元素的cv::Mat来指定均值或标准差...难道不应该使用标量或cv::Scalar更合适吗?奇怪。 - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接