OpenCV基础图像容器Mat

Mat结构的使用

自2001年以来,OpenCV的函数库一直都是基于C的接口构建的,因此在最初的几个版本中,一般使用名为IplImage的C语言结构体在内存中存储图像,时至今日,这仍然出现在旧版教材或嵌入式代码中。

C++的出现,带来了类的概念,这使得我们有了另外一个选择,自动内存管理(一定程度上),在对于广大的图像处理领域的开发人员来说,的确是一件可喜可贺的事情。同样的,OpenCV2/3引入了C++的内存管理机制,利用自动内存管理给出了解决内存泄漏的新方法。使用这种方法,我们不需要再纠结于内存管理,而且代码会变得干净而整洁。

OpenCV中有一个重要的名为Mat的类,首先我们对它稍作了解:

(1) 不需要手动为其开辟内存空间;

(2) 不需要手动释放内存空间。

Mat是一个类,它由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值得矩阵的内存空间的指针。OpenCV是一个图像处理库,囊括了大量的图像处理函数,为了解决问题通常要使用函数库中的很多函数,因此在函数中传递图像是常有的事情。同时,图像处理涉及到大量的数据运算和处理,因此,除非万不得已,不应该进行大图像的复制操作,因为这会大幅降低程序的运行速度。

为了解决这一问题,opencv使用了引用计数机制,其思路是让每个Mat对象有自己的信息头,但共享同一个矩阵信息。这通过让矩阵指针指向同一地址来实现。而拷贝构造函数则只需要复制信息头和矩阵指针,而不复制整个矩阵数据。

 

猜你喜欢

转载自blog.csdn.net/hhaowang/article/details/86562627
今日推荐