资源描述:
《cvarr、mat、cvmat、iplimage、byte转换(总结而来)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、Mat类型:矩阵类型,Matrix。 在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法: 1、Mat mat = imread(const String* filename); 读取图像 2、imshow(const string frameName, InputArray mat); 显示图像 3、imwrite (const string& filename, InputA
2、rray img); 储存图像 Mat类型较CvMat与IplImage类型来说,有更强的矩阵运算能力,支持常见的矩阵运算。在计算密集型的应用当中,将CvMat与IplImage类型转化为Mat类型将大大减少计算时间花费。A.Mat -> IplImage同样只是创建图像头,而没有复制数据。例: // 假设Mat类型的imgMat图像数据存在IplImage pImg= IplImage(imgMat); B.Mat -> CvMat与IplImage的转换类似,不复制数据,只创建矩阵头。例:// 假设Mat类型的imgMat图像数据存在
3、 CvMat cvMat = imgMat; 二、CvMat类型与IplImage类型:“图像”类型 在openCV中,Mat类型与CvMat和IplImage类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,openCV对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。补充:IplImage由CvMat派生,而CvMat由CvArr派生即CvArr -> CvMat -> IplImage
4、CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理。1.CvMatA.CvMat-> IplImageIplImage* img = cvCreateImage(cvGetSize(mat),8,1);cvGetImage(matI,img);cvSaveImage("rice1.bmp",img);B.CvMat->Mat与IplImage的转换类似,可以选择是否复制数据。Mat::Mat(const CvMat* m, bool copyData=false);otherstaffoftheCentre.D
5、uringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterp
6、risesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersand在openCV中,没有向量(vector)的数据结构。任何时候,但我们要表示向量时,用矩阵数据表示即可。但是,CvMat类型与我们在线性代数课程上学的向量概念相比,更抽象,比如CvMat的元素数据类型并不仅限于基础数据类型,比如,下面创建一个二维数据矩阵:
7、 CvMat* cvCreatMat(int rows ,int cols , int type);这里的type可以是任意的预定义数据类型,比如RGB或者别的多通道数据。这样我们便可以在一个CvMat矩阵上表示丰富多彩的图像了。 2.IplImage在类型关系上,我们可以说IplImage类型继承自CvMat类型,当然还包括其他的变量将之解析成图像数据。IplImage类型较之CvMat多了很多参数,比如depth和nChannels。在普通的矩阵类型当中,通常深度和通道数被同时表示,如用32位表示RGB+Alpha.但是,在图像处理中,我们往往
8、将深度与通道数分开处理,这样做是OpenCV对图像表示的一种优化方案。IplImage的对图像