Mat

来源:互联网 发布:快刀抢票软件 编辑:程序博客网 时间:2024/06/03 21:31

Mat


1.mat

主要结合Mat源码分析了mat的构造方法,几个属性和方法

Mat类 , 我们只看我们关心的几个成员和方法class CV_EXPORTS Mat{public:    // -----------1. 构造方法----------------    //! default constructor    Mat();    // 定义mat的行,列,数据类型    Mat(int rows, int cols, int type);    Mat(Size size, int type);    //定义了行,列,数据类型和初始化数据    Mat(int rows, int cols, int type, const Scalar& s);    Mat(Size size, int type, const Scalar& s);    //拷贝对象,个人理解是浅拷贝    Mat(const Mat& m);    //定义了行,列,数据类型,不会创建图像数据的内存,直接使用data指向的内存    Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);    Mat(Size size, int type, void* data, size_t step=AUTO_STEP);    //定义了新图像为m的一部分,大小有后面2个参数决定    Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());    Mat(const Mat& m, const Rect& roi);    Mat(const Mat& m, const Range* ranges);    //进行深拷贝,拷贝了数据和头部    Mat clone() const;    void copyTo( OutputArray m ) const;    // -----------2. 几个成员的get方法----------------    // 每个元素大小    size_t elemSize() const;    //每个通道大小    size_t elemSize1() const;    //    int type() const;    //每个像素所用的位数    int depth() const;    //返回通道数目    int channels() const;    //每一维元素的通道数    size_t step1(int i=0) const;    //判断是否为空    bool empty() const;    //返回矩阵成员个数    size_t total() const;    // -----------3. 重要的几个成员变量----------------    //flag包含了很多属性的信息    int flags;    //矩阵的维度    int dims;    //矩阵的行数,列数    int rows, cols;    //矩阵数据的指针    uchar* data;    // 引用计数    int* refcount;};

2.数据类型

CV_[位深][signed or unsigned]C[通道数目]
位数就是由几位二进制表示,8,16等
signed or unsigned由符号还是无符号
通道数目代表了图像的通道数目 , 1,3,4等

CV_8UC3 代表了图像中的数据类型是有3个通道,就是每个像素有RGB三个,每个有8个二进制无符号代表