openCV中Mat对象的使用
Mat简介
OpenCv提供了Mat类用来存储矩阵类型数据,包括向量、矩阵、图像等数据。Mat类分为分为矩阵头和指向存储数据的矩阵指针两部分。矩阵头包含矩阵的尺寸、存储方法、地址和引用次数。矩阵头是一个常数,绝大数情况下,矩阵头的大小远小于矩阵数据量的大小。
Mat对象使用
部分复制一般只会复制Mat对象的头和指针部分,不会复制数据部分。
Mat A=imread(imageFilePath);
Mat B(A)
完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个函数实现:
Mat F =A.clone();
Mat G;
A.copyTo(G);
Mat对象使用的四个要点
输出图像的内存是自动分配的
使用OpenCV的c++接口,不需要考虑内存分配的问题
赋值操作和拷贝构造函数只会复制头部分
使用clone和copyTo两个函数实现完全复制
Mat对象创建
cv::Mat::Mat()
Mat M(2,2,CV_8UC3,Scalar(0,0,255));
其中前两个参数分别表示行(row)跟列(column)第三个CV_ 8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致
创建多维数组
使用create函数
Mat M;
M.create(4,3,CV_8UC2);
M=Scalar(123,123);
Mat常用的属性和方法
cols //矩阵的列数
rows //矩阵的行数
steps //以字节为单位的有效宽度
dims //矩阵的维度
成员方法
elemSize() //每个元素的字节数
total() //矩阵中元素的个数
channels() //矩阵的通道数