【问题标题】:Generate random numbers matrix in OpenCV在 OpenCV 中生成随机数矩阵
【发布时间】:2016-02-20 16:49:24
【问题描述】:

我想知道如何生成任意给定大小的随机数矩阵,例如2x4。矩阵应由范围内的有符号整数组成,例如[-500, +500]

我已经阅读了RNG 的文档,但我不确定我应该如何使用它。 我也提到了这个question,但这并没有为我提供我正在寻找的解决方案。

我知道这可能是一个愚蠢的问题,但我们将不胜感激。

【问题讨论】:

    标签: opencv matrix random


    【解决方案1】:

    如果您希望值均匀分布,您可以使用cv::randu

    Mat1d mat(2, 4); // Or: Mat mat(2, 4, CV_64FC1);
    double low = -500.0;
    double high = +500.0;
    randu(mat, Scalar(low), Scalar(high));
    

    注意上限是排他的,所以这个例子代表[-500, +500)范围内的数据。


    如果您希望值正常分布,您可以使用cv::randn

    Mat1d mat(2, 4); // Or: Mat mat(2, 4, CV_64FC1);
    double mean = 0.0;
    double stddev = 500.0 / 3.0; // 99.7% of values will be inside [-500, +500] interval
    randn(mat, Scalar(mean), Scalar(stddev));
    

    这适用于最多 4 个通道的矩阵,例如:

    Mat3b random_image(100,100);
    randu(random_image, Scalar(0,0,0), Scalar(256,256,256));
    

    【讨论】:

    • 谢谢@Miki。但是什么是 Mat1d?
    • 这是typedefMat_<double>。它比CV_64FC1 类型的Mat 更容易使用。上面的代码也适用于MatMat mat(2,4,CV_64FC1);
    • 谢谢@Miki。我会试试看的。
    • 所有解决方案都可以正常工作@Miki。谢谢你。但我有 1 个问题。为什么即使我将低和高更改为 int,我的输出也会加倍?我有可能把它当作 int 吗?
    • 只需更改矩阵的类型即可。使用“Mat1i”
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2019-10-14
    • 2020-04-20
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多