一、创建矩阵的方式:
1、cvCreateMat(int rows,int cols,int type),Type可以使任何预定义类型。Type的写法规则:CV_<bit_depth>(S|U|F)C<number_of_channels,比如CV_32FC1, 32位浮点型,单通道。 CvMat* mat=cvCreateMat(8,9,CV_32FC1); //创建一个8行9列的32位浮点型单通道矩阵
2、cvCreateMatHeader()函数创建CvMat结构体,不分配数据内存,然后由cvCreateData()函数分配数据需要的内存。 CvMat*mat=cvCreateMatHeader(8,9,CV_32FC1); cvCreateMatHeader(mat);
3、数组创建矩阵:cvInitMatHeader()函数,在已有的CvMat结构体上初始化矩阵。
float data[]={1,2,3,4}; CvMat* mat; cvInitMatHeader(&mat,2,2,CV_32FC1,data);
4、cvCloneMat(),该函数依据现有矩阵克隆一个矩阵,分配了独立的空间,需要使用cvReleaseMat()释放。 CvMat* mat_1=cvCloneMat(mat);
二、获取矩阵的相关属性
1、获取矩阵的数据类型:cvGetElemType
2、获取矩阵的维度和每一维上的大小:cvGetDims
3、获取矩阵某一个维度上的大小:cvGetDimSize
4、二维矩阵获取矩阵大小:cvGetSize
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int main(int argc, char* argv[])
{
CvMat *mat=cvCreateMat(8,9,CV_32FC1); //创建一个矩阵
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,0); //获取矩阵某一维的大小
printf("矩阵第2维的大小是: %d\n",number);
return 0;
}
运行结果: