1,Mat介绍
Mat是matrix的缩写,即代表矩阵或数组的意思。在opencv中关于该类的声明在opencv2/core/core.hpp中,因此使用该类的时候就需要引用此头文件。
构造一个Mat矩阵需要十个基本要素:行数(宽)、列数(高)、通道数、数据类型:Mat(int rows,int cols,int type),其中的type就是CV_8UC(n),CV_8SC(n),CV_16SC(n),CV_32FC(n)等类型,前面的8U、8S、32F中的数值代表bit,后面的U,F,S代表数据类型:如U代表uchar,一般1byte=8bit,所以32F就是占4字节的float类型。后面的C(n)中的n=1则代表是单通道或者可以说二维矩阵,n>1则代表着多通道或者三维矩阵。
Mat的使用方法
1,首先构造一个单通道的Mat对象,代码如下:
#include "pch.h"
#include <iostream>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
Mat m = Mat(2, 3, CV_32FC1);
return 0;
}
这就是一个单纯的构造Mat对象代码,那么想要往Mat里面添加数据呢?
如下,添加一个2行3列的0矩阵:
#include "pch.h"
#include <iostream>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
Mat m = Mat::zeros(2, 3, CV_32FC1);
return 0;
}
或者这样:
#include "pch.h"
#include <iostream>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
Mat m = (Mat_<int>(2, 3) << 1, 2, 3, 4, 5, 6);
return 0;
}
2,如何访问Mat中的值
对于Mat值的访问,加入数据格式为int型的m,访问第r行第c列可以用成员函数at,格式为m.at(r,c),代码如下:
#include "pch.h"
#include <iostream>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;
int main(int argc,char* argv[])
{
//构造一个单通道矩阵
Mat m = (Mat_<int>(2, 3) << 11, 22, 33, 44, 55, 66);
//打印m中的每一个值
for (int r = 0; r < m.rows; r++)
{
for (int c = 0; c < m.cols; c++)
{
cout << m.at<int>(r, c) << ",";//第r行第c列的值
}
cout << endl;
}
}
结果:
未完待续。。。。
参考张平老师的opencv算法精解。