CvMat和Mat

2014年10月1日 由 Creater 留言 »

CvMat

首先,我们需要知道,第一,在OpenCV中没有向量(vector)结构。任何时候需要向量,都只需要一个列矩阵(如果需要一个转置或者共轭向量,则需要一个行矩阵)。第二,OpenCV矩阵的概念与我们在线性代数课上学习的概念相比,更抽象,尤其是矩阵的元素,并非只能取简单的数值类型,可以是多通道的值。

Mat

Mat是opencv2.0推出的处理图像的新的数据结构,现在越来越有趋势取代之前的cvMat和lplImage,相比之下Mat最大的好处就是能够更加方便的进行内存管理,不再需要程序员手动管理内存的释放。opencv2.3中提到Mat是一个多维的密集数据数组,可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 之前的图像一般都是用IplImage*表示。

CvMat和Mat的互相转换公式,基本上是复制数据块。

CvMat -> Mat

Mat::Mat(const CvMat* m, bool copyData=false); /*类似IplImage -> Mat,可选择是否复制数据*/

Mat -> CvMat

例子(假设Mat类型的imgMat图像数据存在):

CvMat cvMat = imgMat; /*Mat -> CvMat, 类似转换到IplImage,不复制数据只创建矩阵头*/

广告位

发表评论

你必须 登陆 方可发表评论.