CvMat结构

时间:2023-03-10 05:43:45
CvMat结构

一、创建矩阵的方式:

  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;
}

运行结果:

CvMat结构