现在的位置: 首页 > 综合 > 正文

OpenCV函数生成随机数

2018年02月12日 ⁄ 综合 ⁄ 共 2030字 ⁄ 字号 评论关闭

   利用OpenCV函数生成随机数,填充数组。主要参考OpenCV中文网站OpenCV手册

   http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C

   函数:RandArr

#include "stdafx.h" 

#include <cv.h>

#include <cxcore.h>

#include <highgui.h> 

int _tmain(int argc, _TCHAR* argv[])

{  

         /* let'snoisy_screen be the floating-point 2d array that is to be "crapped"*/

CvMat*  noisy_screen =  cvCreateMat(10,10, CV_32F); // 为noisy_screen申请空间


         CvRandState    rng_state;// = cvRNG(0xffffffff);      // 修改为CvRandState形式, 原文有错误

         int i,pointCount = 1000;

         /* allocatethe array of coordinates of points */

         CvMat*locations = cvCreateMat( pointCount, 1, CV_32SC2 );
// 设置是两个通道,坐标形式

         /* arr ofrandom point values */

         CvMat*values = cvCreateMat( pointCount, 1, CV_32FC1 );

         CvSize size= cvGetSize( noisy_screen );

 

         cvRandInit(&rng_state,

                   0,1, /* 现在使用虚参数以后再调整*/

                   0xffffffff/*这里使用一个确定的种子 */,

                   CV_RAND_UNI/* 指定为均匀分布类型*/ );

 

         /* 初始化locations*/

         cvRandArr(&rng_state.state, locations, CV_RAND_UNI,
cvScalar(0,0,0,0),cvScalar(size.width,size.height,0,0
) );

         // 二维数据,所以需要x,y维的数据来进行

         /* modifyRNG to make it produce normally distributed values */

         rng_state.disttype= CV_RAND_NORMAL;

         cvRandSetRange(&rng_state,

                   30/* deviation */,

                   100/* average point brightness */,

                   -1/* initialize all the dimensions */ );

         /* generatevalues */

         cvRandArr(&rng_state.state, values, CV_RAND_NORMAL,

                   cvRealScalar(100),// average intensity

                   cvRealScalar(30)// deviation of the intensity

                   );

// 一维数组情况下参数是cvRealScalar(), 而二维数组情况下是cvScalar()

 

         /* set thepoints */

         for( i = 0;i < pointCount; i++ )

         {

                   CvPointpt = *(CvPoint*)cvPtr1D( locations, i, 0 );

                   floatvalue = *(float*)cvPtr1D( values, i, 0 );

                   *((float*)cvPtr2D(noisy_screen, pt.y, pt.x, 0 )) += value;

         }

 

         /* not toforget to release the temporary arrays */

         cvReleaseMat(&locations );

         cvReleaseMat(&values );

 

         /* RNGstate does not need to be deallocated */

抱歉!评论已关闭.