// XooTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio.h> void main() { CvMat* a = cvCreateMat( 3, 4, CV_32F ); printf("/n=====11111111111111===== Test generating Init matrix ==="); int i,j; for(i=0;i<a->rows;i++) { printf("/n"); for(j=0;j<a->cols;j++) printf("%12d",(int)cvGetReal2D( a, i, j )); } printf("/n===22222222222222=== Test generating random matrix ==="); CvRandState rng; rng.state = cvRNG(0xffffffff); cvRandInit( &rng,0, 1,1,CV_RAND_NORMAL ); cvRandArr( &rng.state, a, CV_RAND_NORMAL,cvRealScalar(0),cvRealScalar(1) ); for(i=0;i<a->rows;i++) { printf("/n"); for(j=0;j<a->cols;j++) printf("%8d",(int)cvGetReal2D( a, i, j )); } printf("/n===3333333333333333=== Test generating random matrix ==="); cvRandInit( &rng,0, 1,3,CV_RAND_UNI ); cvRandArr( &rng.state, a, CV_RAND_UNI,cvRealScalar(0),cvRealScalar(1) ); for(i=0;i<a->rows;i++) { printf("/n"); for(j=0;j<a->cols;j++) printf("%9.2f",(float)cvGetReal2D(a, i, j )); } cvReleaseMat(&a); } //1111111111111111111111111111111111111111111111111111111111111111111111111 //CreateMat //创建矩阵 //CvMat* cvCreateMat( int rows, int cols, int type ); //rows //矩阵行数。 //cols //矩阵列数。 //type //矩阵元素类型。 通常以 CV_<比特数>(S|U|F)C<通道数>型式描述, 例如: // CV_8UC1 意思是一个8-bit 无符号单通道矩阵, CV_32SC2 意思是一个32-bit 有符号二个通道的矩阵。 //函数 cvCreateMat 为新的矩阵分配头和下面的数据,并且返回一个指向新创建的矩阵的指针。是下列操作的缩写型式: //CvMat* mat = cvCreateMatHeader( rows, cols, type ); //cvCreateData( mat ); //矩阵按行存贮。所有的行以4个字节对齐。 //22222222222222222222222222222222222222222222222222222222222222222222 //GetReal*D //返回单通道数组的指定元素 //double cvGetReal1D( const CvArr* arr, int idx0 ); //double cvGetReal2D( const CvArr* arr, int idx0, int idx1 ); //double cvGetReal3D( const CvArr* arr, int idx0, int idx1, int idx2 ); //double cvGetRealND( const CvArr* arr, int* idx ); //arr //输入数组,必须是单通道. //idx0 //元素下标的第一个成员,以0为基准 //idx1 //元素下标的第二个成员,以0为基准 //idx2 //元素下标的第三个成员,以0为基准 //idx //元素下标数组 //函数cvGetReal*D 返回单通道数组的指定元素, //如果数组是多通道的,就会产生运行时错误, //而 cvGet*D 函数可以安全的被用于单通道和多通道数组,但他们运行时会有点慢 //如果指定的点不存在对于稀疏数组点会返回0(不会创建新的节点)。 //33333333333333333333333333333333333333333333333333333333333333333333333333 //RNG //初始化随机数生成器状态 //CvRNG cvRNG( int64 seed=-1 ); //seed //64-bit 的值用来初始化一个随机序列 //函数 cvRNG 初始化随机数生成器并返回其状态。 //指向这个状态的指针可以传递给函数 cvRandInt, cvRandReal 和 cvRandArr . //在通常的实现中使用一个 multiply-with-carry generator 。 //4444444444444444444444444444444444444444444444444444444444444444444444444444444 //cvRandInit() //初始化CvRandState数据结构,可以选定随机分布的种类,并给定它种子,有两种情形 //cvRandInit(CvRandState数据结构,随机上界,随机下界,均匀分布参数,64bits种子的数字) //cvRandInit(CvRandState数据结构,平均数,标准偏差,常态分布参数,64bits种子的数字) //555555555555555555555555555555555555555555555555555555555555555555555555555555555 ////RandArr //用随机数填充数组并更新 RNG 状态 //void cvRandArr( CvRNG* rng, CvArr* arr, int dist_type, CvScalar param1, CvScalar param2 ); //rng //被 cvRNG 初始化的 RNG 状态. //arr //输出数组 //dist_type //分布类型: //CV_RAND_UNI - 均匀分布 //CV_RAND_NORMAL - 正态分布 或者 高斯分布 //param1 //分布的第一个参数。如果是均匀分布它是随机数范围的闭下边界。如果是正态分布它是随机数的平均值。 //param2 //分布的第二个参数。如果是均匀分布它是随机数范围的开上边界。如果是正态分布它是随机数的标准差。 //函数 cvRandArr 用均匀分布的或者正态分布的随机数填充输出数组。
运行结果如下:
=====11111111111111===== Test generating Init matrix ===
-431602080 -431602080 -431602080 -431602080
-431602080 -431602080 -431602080 -431602080
-431602080 -431602080 -431602080 -431602080
===22222222222222=== Test generating random matrix ===
0 1 1 1
-1 0 0 2
-1 -1 0 0
===3333333333333333=== Test generating random matrix ===
0.41 0.31 0.79 0.20
0.21 0.22 0.43 0.91
0.25 0.27 0.48 0.46请按任意键继续. . .