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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值