矩阵cvMat

来源:互联网 发布:放大镜 知乎 编辑:程序博客网 时间:2024/06/08 04:04

一、CvMat结构体

typedef struct CvMat{    int type;    int step;    int* refcount;    int hdr_refcount;    union    {         uchar* ptr;         short* s;         int* i;         float* fl;         double* db;    } data;    union    {         int rows;         int height;    };    union    {         int cols;         int width;    };} CvMat;

二、矩阵的创建和释放

CvMat* cvCreateMat(int rows,int cols,int type);CvMat* cvCreateMatHeader(int rows,int cols,int type);CvMat* cvInitMatHeader(int rows,int cols,int type,void* data = NULL,int step = CV_AUTOSTEP);CvMat* cvMat(int rows,int cols,int type,void* data = NULL)CvMat* cvCloneMat(const cvMat* mat);cvReleaseMat(CvMat** mat);

三、矩阵数据的存取

1·简单的方法     利用CV_MAT_ELEM()或CV_MAT_ELEM_PTR()宏     例:CV_MAT_ELEM()          CvMat* mat = cvCreateMat(5,5,CV_32FC1);          float element_3_2 = CV_MAT_ELEM( *mat,float,3,2);     例:CV_MAT_ELEM_PTR()          CvMat* mat = cvCreateMat(5,5,CV_32FC1);          float element_3_2 = 7.7;          *(float*)CV_MAT_ELEM_PTR(*mat,3,2) = element_3_2;2·麻烦的方法     指针访问矩阵结构cvPtr*D家族和cvGet*D、cvSet*D家族;uchar* cvPtr1D(const CvArr* arr,int idx0,int* type = NULL);uchar* cvPtr2D(const CvArr* arr,int idx0,int idx1,int* type = NULL);uchar* cvPtr3D(const CvArr* arr,int idx0,int idx1,int idx2,int* type = NULL);uchar* cvPtrND(const CvArr* arr,int* idx,int* type = NULL,int create_node = 1,unsigned* precalc_hashval = NULL);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);CvScalar cvGet1D(const CvArr* arr,int idx0);CvScalar cvGet2D(const CvArr* arr,int idx0,int idx1 );CvScalar cvGet3D(const CvArr* arr,int idx0,int idx1,int idx2 );CvScalar cvGetND(const CvArr* arr,int* idx); double cvSetReal1D(const CvArr* arr,int idx0); double cvSetReal2D const CvArr* arr,int idx0,int idx1); double cvSetReal3D(const CvArr* arr,int idx0,int idx1,int idx2);double cvSetRealND(const CvArr* arr,int* idx);CvScalar cvSet1D(const CvArr* arr,int idx0);CvScalar cvSet2D(const CvArr* arr,int idx0,int idx1 );CvScalar cvSet3D(const CvArr* arr,int idx0,int idx1,int idx2 );CvScalar cvSetND(const CvArr* arr,int* idx);