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