熟知Mat类,能够创建、赋值,了解其成员函数和常见的运算操作。
1.Mat类有两个数据部分:矩阵头(包含矩阵的大小,存储方法和存储地址等)和一个指针,指向包含像素值的矩阵地址。矩阵头的存储空间是常数,矩阵本身的尺寸随着图像大小改变。
2.矩阵的拷贝、赋值运算符通常只赋值矩阵头和矩阵指针,但不是矩阵本身,即采用浅拷贝来提高效率
1.构造方法
Mat img(3,2, CV_8UC3, Scalar(0,0,255))
创建一个Mat类型的变量img,它是一个3行2列的矩阵,元素是8位无符号整数且有三个通道,初始化为Scalar(0,0,255)即红色图像。
2.create()
使用create创建Mat对象时不能初始化。
Mat img;
img.create(3,2,CV_8UC1)
3.直接赋值
m = (Mat_(2,3) << 1,2,3,4,5,6); // 直接赋值
4.浅拷贝
矩阵相互赋值,只创建矩阵头,共享数据部分。
Mat img1( img ); //img和myMat共享图像数据
Mat myMat= img1; //仅创建头部分,共享数据部分
5.深拷贝
使用clone()和copyTo()实现深拷贝
Mat img = myMat.clone()
Mat G;
img.copyTo(G);
6.使用eye()、ones()、zeros()初始化Mat
Mat A = Mat:: eye(4,4,CV_64F) //初始化为对角矩阵
Mat B = Mat:: ones( 2, 2, CV_8U) //所有元素初始化为1
Mat C = Mat:: zeros( 3, 3, CV_8UC1) //所有元素初始化为0
四、Mat常见的运算操作
设为A,B为Mat类型,s是Scalar类型,a是一个实数。下面列出关于Mat的常用运算:
以上方法均为Mat的内部方法,可以直接调用。