Mat

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个二进制无符号代表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值