【问题标题】:OpenCV: randn() generator like in matlabOpenCV:像 matlab 中的 randn() 生成器
【发布时间】:2013-09-26 19:38:31
【问题描述】:

我正在寻找生成(在 OpenCV 中)均值为 0 方差为 1 的随机数矩阵 (2xN) 的最佳解决方案,例如 Matlab 中的函数 randn()

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

【问题讨论】:

    标签: matlab opencv


    【解决方案1】:

    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 有多个通道,则每个通道使用不同的平均值/西格玛。在这种情况下,您需要增加 mean 和 sigma 中的行数(或 cols)以匹配 matrix2xN 中的通道数。

    【讨论】:

    • 感谢您的回答。 +1。作为旁注,在 API 设计中必须指定一个元素的 cv::Mat 以指定均值或标准偏差似乎很浪费......不是标量或cv::Scalar 更合适?很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2021-01-03
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2018-06-05
    相关资源
    最近更新 更多