Opencv-rng随机数生成的使用

来源:互联网 发布:saas软件开发 编辑:程序博客网 时间:2024/04/29 22:55

Opencv-rng随机数生成的使用

Opencv访问像素点有很多方法,我采用的是最简单的一种,但是作为一个小白,还是遇到很多问题:

cout<<LImg.at<Vec3f>(j,i)[0];

之前想输出图像某一点值,结果报错,不知为何,后来把Vec3f->Vec3b,成功读出,应该是读入的图像是uint8格式,而不是double型,虽然在opencv中也是用imread读入。MATLAB中的imread,读入图像也是uint8吧!唉,小白一只,二逼无限~

cout<<LImg.at<Vec3b>(j,i)[0];

不知道opencv里面有没有 绝对值 abs 指数 exp,反正就直接用了,反正也没有报错

代码还是报错,发现是访问像素点越界,计算正确的边界后,如下

if((odd==true)&&(x>-1)&&(x<(col-1))&&(y>-1)&&(y<(row-1)))

其实最大的收获,是知道了,opencv中生成随机数的方法,有和MATLAB差不多的randn()也有,但是并没有那么好用,就是不能决定产生随机数的种子是什么,可以是高斯,或者是均匀分布。
其实在opencv中,使用rng(随机数产生器),更加合适,当时在stackflow上看到的,然后自己去搜索了一下
RNG 是一个类,首先要产生一个对象,rng_R, next可以取出下一个随机数,uniform函数可以返回指定范围的随机数,gaussian函数返回一个高斯随机数,fill则用随机数填充矩阵。
还有一些随机数相关的函数,比如randu可以产生一个均匀分布的随机数或者矩阵,randn可以产生一个正态分布的随机数,randShuffle可以随机打乱矩阵元素。

cv::RNG rng_R( cv::getTickCount() );//产生对象rng_R,随时间每次产生的随机数都不同cv::Mat RandMap_R(row,col,CV_32FC3);//创建矩阵,用来装随机数rng_L.fill(RandMap_R, cv::RNG::UNIFORM, 0.f, 1.f);//用fill命令把随机数装进去,第一个参数:装随机数的矩阵;第二个参数:cv::RNG::UNIFORM:均匀分布的随机数,cv::RNG::GAUSSIAN高斯分布的随机数;第三个参数:产生的随机数的范围,上面的例子表示float型:0~1(也可以使float,double,最好不要int,否则最后的随机数都是0,你懂得~)
0 0