我正在尝试生成一个值在-1和1之间的伯努利矩阵。我正在使用OpenCV的cv::Mat
作为数据结构来保存值。有没有简单的方法来生成这样的矩阵?据我所知,OpenCV没有提供执行此操作的方法,因此我很乐意在需要时使用另一个库。
最佳答案
您需要遍历这些值,并一一分配随机数。
这是这样做的方法:
boost::random::mt19937 rng; // produces randomness out of thin air
// see pseudo-random number generators
boost::random::uniform_int_distribution<> uni01(0,1);
Mat bernoulli; bernoulli.create(rows, cols,CV_32FC1);
MatIterator_<float> it = bernoulli.begin<float>(), it_end = bernoulli.end<float>();
for(;it!=it_end;++it)
(*it) = uni01(rng) ? 1.0 : -1.0;