// 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请按任意键继续. . .