edu.51cto.comedu.51cto.comOpenCV3.1.0–图像处理教程edu.51cto.com讲师:贾志刚E-Mail:bfnh1998@hotmail.com微博:流浪的鱼-GloomyFishedu.51cto.comMat对象Mat对象与IplImage对象Mat对象使用Mat定义数组edu.51cto.comMat对象edu.51cto.comMat对象与IplImage对象Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题edu.51cto.comMat对象构造函数与常用方法常用方法:voidcopyTo(Matmat)voidconvertTo(Matdst,inttype)Matclone()intchannels()intdepth()boolempty();uchar*ptr(i=0)edu.51cto.comMat对象使用部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分MatA=imread(imgFilePath);MatB(A)//只复制完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个API实现MatF=A.clone();或MatG;A.copyTo(G);edu.51cto.comMat对象使用-四个要点输出图像的内存是自动分配的使用OpenCV的C++接口,不需要考虑内存分配问题赋值操作和拷贝构造函数只会复制头部分使用clone与copyTo两个函数实现数据完全复制edu.51cto.comMat对象创建cv::Mat::Mat构造函数MatM(2,2,CV_8UC3,Scalar(0,0,255))其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致创建多维数组cv::Mat::createintsz[3]={2,2,2};MatL(3,sz,CV_8UC1,Scalar::all(0));edu.51cto.comcv::Mat::create实现MatM;M.create(4,3,CV_8UC2);M=Scalar(127,127);cout<<"M="<(0);printf("%d",*firstRow);edu.51cto.com定义小数组MatC=(Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);cout<<"C="<#include#include#includeusingnamespacecv;usingnamespacestd;intmain(intargc,char**args){Matimage=imread("D:/test.jpg",IMREAD_GRAYSCALE);if(image.empty()){cout<<"couldnotfindtheimageresource..."<(0);printf("%d\n",*firstRow);MatC=(Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);cout<<"C="<