OpenCV学习笔记(一):生成随机矩阵

引言:

众所周知,OpenCV对图像的处理是把图像作为一个二维矩阵来进行了,(i,j)表示图像中第i行第j列位置,而A(i,j)则表示此位置上的值(灰度值)。因此,作为OpenCV第一课笔记,先学习下如何利用OpenCV生成随机矩阵。

首先,CvRandState是opencv提供的另一个生成随机数的结构体,对于CvRandState来说,它的特色在于可以选定常态分布和均匀分布。因此,我们利用此结构生成[0,1]区间均匀分布随机矩阵:

void GenRand(CvMat *arr,int seed)   //生成[0,1]区间均匀分布的随机矩阵
{
CvRandState randstate;
randstate.state=cvRNG(0xffffffff);
cvRandInit(&randstate,0,1,seed,CV_RAND_UNI);
cvRandArr(&randstate.state,arr,CV_RAND_UNI,cvRealScalar(0),cvRealScalar(1));
}


以下是cvRandInit生成2种特色随机矩阵的参数说明:

cvRandInit(CvRandState结构,随机上界,随机下界,均匀分布但参数,指定分布类型(CV_RAND_UNI))
cvRandInit(CvRandState结构,平均数,标准差,正态分布参数,正态分布类型(CV_RAND_NORMAL))

然后,我们编写一个专门打印矩阵的函数,以方便今后使用:

void  PrintMat(CvMat *A) //打印矩阵
{
int i,j;
cout<for (i=0;irows;++i)
{
cout<switch(CV_MAT_DEPTH(A->type))
{
case CV_32F:
case CV_64F:
for(j=0;jcols;++j)
cout<break;
case CV_8U:
case CV_16U:
for (j=0;jcols;++j)
{
cout<break;
}
default:
break;
}


}
cout< }

最后,我们编写一个测试函数,使程序结构清晰:

void Test_rand() //测试随机生成矩阵
{
CvMat *arr=cvCreateMat(10,6,CV_32F);
int i;
cout<for (i=0;i<5;i++)
{
GenRandn(arr,i);
// GenRand(arr,i);
PrintMat(arr);
}
cvReleaseMat(&arr);
}

OK,有了上面3个函数后,我们可以完成整个程序了,在main函数中调用Test_rand()即可。

最后程序运行结果:


本节完。在下初学,谢谢观众。




你可能感兴趣的:(OpenCV学习笔记(一):生成随机矩阵)