opencv:矩陣CvMat

一、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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章