【发布时间】:2016-02-20 16:49:24
【问题描述】:
我想知道如何生成任意给定大小的随机数矩阵,例如2x4。矩阵应由范围内的有符号整数组成,例如[-500, +500]。
我已经阅读了RNG 的文档,但我不确定我应该如何使用它。 我也提到了这个question,但这并没有为我提供我正在寻找的解决方案。
我知道这可能是一个愚蠢的问题,但我们将不胜感激。
【问题讨论】:
我想知道如何生成任意给定大小的随机数矩阵,例如2x4。矩阵应由范围内的有符号整数组成,例如[-500, +500]。
我已经阅读了RNG 的文档,但我不确定我应该如何使用它。 我也提到了这个question,但这并没有为我提供我正在寻找的解决方案。
我知道这可能是一个愚蠢的问题,但我们将不胜感激。
【问题讨论】:
如果您希望值均匀分布,您可以使用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));
【讨论】:
typedef 的Mat_<double>。它比CV_64FC1 类型的Mat 更容易使用。上面的代码也适用于Mat:Mat mat(2,4,CV_64FC1);