cv::Mat.randu nrandu 详解
时间: 2023-07-03 14:09:48 浏览: 149
`cv::Mat.randu`和`cv::Mat.nrandu`是OpenCV库中的两个随机数生成函数,用于在给定范围内生成随机数并填充`cv::Mat`对象。
`cv::Mat.randu`生成均匀分布的随机数,它的函数原型如下:
```cpp
void cv::randu(InputOutputArray dst, InputArray a, InputArray b);
```
其中,`dst`为输出的`cv::Mat`对象,`a`和`b`分别为随机数生成的范围,包括左端点但不包括右端点。例如,若要生成0到1之间的随机数,可以使用以下代码:
```cpp
cv::Mat mat(3, 3, CV_32F);
cv::randu(mat, 0.0f, 1.0f);
```
这将生成一个3x3的`cv::Mat`对象`mat`,并将其填充为0到1之间的随机数。
`cv::Mat.nrandu`生成正态分布的随机数,它的函数原型如下:
```cpp
void cv::randn(InputOutputArray dst, InputArray mean, InputArray stddev);
```
其中,`dst`为输出的`cv::Mat`对象,`mean`和`stddev`分别为正态分布的均值和标准差。例如,若要生成均值为0,标准差为1的正态分布随机数,可以使用以下代码:
```cpp
cv::Mat mat(3, 3, CV_32F);
cv::randn(mat, 0.0f, 1.0f);
```
这将生成一个3x3的`cv::Mat`对象`mat`,并将其填充为均值为0,标准差为1的正态分布随机数。
需要注意的是,这两个函数生成的随机数都是位于开区间(a, b)或(-∞, +∞)之间的,但不包括端点a和b。如果需要生成包含端点的闭区间内的随机数,可以将范围稍作调整。
阅读全文