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(int ndims, const int* sizes, int type);
Mat(int ndims, const int* sizes, int type, const Scalar& s);
Mat(const Mat& m);
Mat m1;//m1使用默认的构造方法
cout << "m1 = " << m1 << endl;//输出:m1 = []
Mat m2(Size(310, 310), CV_8UC3);//指定矩阵大小、类型的构造函数
m2 = Scalar(0, 0, 255);
namedWindow("m2", CV_WINDOW_AUTOSIZE);
imshow("m2", m2);
Mat m3(310, 310, CV_8UC3);//指定行数、列数、类型的构造函数
m3 = Scalar(0, 0, 0);
namedWindow("m3", CV_WINDOW_AUTOSIZE);
imshow("m3", m3);
Mat m4(310, 310, CV_8UC3, Scalar(255, 0, 0));//指定矩阵行列、类型、向量的构造函数
namedWindow("m4", CV_WINDOW_AUTOSIZE);
imshow("m4", m4);
Mat m5(src.size(), src.type());//创建一个和原图大小类型相同的图像
namedWindow("m5", CV_WINDOW_AUTOSIZE);
imshow("m5", m5);
Mat m4(310, 310, CV_8UC3, Scalar(255, 0, 0));其前两个参数分别表示行跟列的数目,第三个参数CV_8UC3中的8表示每个通道占8位,U表示无符号,C表示char类型,3表示通道数目,第四个参数是向量表示初始化每个像素值是多少,向量长度与通道数目一致,如果是3通道,向量中的值依次是blue,green,red颜色空间的值
void copyTo(Mat mat);//完全复制一份
void convertTo(Mat dst, int type);//转换,比如8位的转换为float
Mat clone();//完全复制一份
int channels();//通道数
int depth();//深度
bool empty();//是否空
uchar* ptr(i = 0);//矩阵数据指针
通过构造函数创建
Mat m4(310, 310, CV_8UC3, Scalar(255, 0, 0));
通过create函数创建
Mat m6;
m6.create(310, 310, CV_8UC2);
m6 = Scalar(127, 127);
定义小数组
Mat m7 = (Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分
Mat m8(src);
完全复制:如果想把Mat对象的头部和数据部分一起复制,可通过如下两种方式实现:
Mat m9 = src.clone();
Mat m9;
src.copyTo(m9);