OpenCv中矩阵的创建

来源:互联网 发布:矩阵特征值 编辑:程序博客网 时间:2024/04/28 01:32

    

        摘要  : 此次实验主要是了解矩阵创建的方式以及获取矩阵的相关属性,通过实验达到访问其类型,维度等属性的目的。

       关键词 :cvGreateMat()  cvGetDims()   cvGetElemType()                  

1.创建矩阵的方式:
  (1):cvGreateMat(int rows,int cols,int type).Type可以使用任何定义类型;
   Type:CV_<bit_depth>(S|U|F)<number_of_channels>(其中bit_depth代表数据位数,S:有符号整数, U:无符号整数
 F:浮点)
   For exemple:CvMat*mat=cvGreateMat(8,9,CV_32FC1);// 创建一个八行九列的32位浮点型单通道

  (2):CvGreateMatHeader()函数创建CvMat结构体,不分配数据内存,由cvGreateData()函数分配数据需要的数据内存。
   For exemple: CvMat*mat=cvGreateMat(8,8,CV_32FC1);
                                  cvGreateMatHeader(mat);

2.获取矩阵的相关属性
 (1)cvGetElemType() :数据类型 
 (2)cvGetDims():返回指定数组的维数并可以返回每一个维数的大小。如果数组sizes非空,那么大小将被写入sizes。如果使用了参数sizes,它应该是一个n个整数的指针,这里的n指维数。若不明确n的大小,可把sizes大小指定为CV_MAT_DIM。
 (3)CvGetDimSize():返回一个由index参数指定的某一维的大小。 
 (4):cvGetSize():它与cvGetDims()密切相关,cvGetDims()返回一个数组的大小。主要的不同是cvGetSize()是专门为矩阵和图像设计的,这两种对象的维数总是2。


3.实验操作


#include"cv.h"
#include"highgui.h"


int main(int argc, char*argv[])
{
CvMat*mat = cvCreateMat(7, 8, CV_32FC3);//创建一个矩阵
int type = cvGetElemType(mat);//获取矩阵的类型
printf("矩阵的类型是:");//输出矩阵的类型
printf("%d\n", type);


int sizes[3] = { 0 };
int dims = cvGetDims(mat, sizes);//获取矩阵维度和每一维度上的大小
printf("矩阵的维度是:");
printf("%d\n", dims);
printf("矩阵每一维度的大小分别是:");
printf("%d %d\n", sizes[0], sizes[1]);//输出每一维度上的大小
int number = cvGetDimSize(mat, 1);
printf("矩阵第二维的大小是:%d\n",number);
return 0;
}



运行结果如下图所示:


参考文献:《学习opencv(中文版)》P74-75