这节记录下图像加载或者读取后的内存对象Mat的相关知识。
包括:Mat对象和IplImage对象,Mat对象的使用,Mat定义数组。
1、Mat对象和IplImage对象:
IplImage对象:是从2001年OpenCV发布就一直存在的,是C语言风格的数据结构,需要开发者自己分配和管理内存,对大的程序来说,使用IplImage对象容易造成内存泄漏的问题。
Mat对象:OpenCV2.0以后引入的图像数据结构,自动分配内存,不存在内存泄漏的问题,是面向对象的数据结构。分成了两个部分,头部与数据部分。
上一节中说道:
还是先看Mat的存储形式。Mat和Matlab里的数组格式有点像,但一般是二维向量,如果是灰度图,一般存放<uchar>类型;如果是RGB彩色图,存放<Vec3b>类型。
单通道灰度图数据存放格式:
多通道的图像中,每列并列存放通道数量的子列,如RGB三通道彩色图:
注意通道的顺序反转了:BGR。通常情况内存足够大的话图像的每一行是连续存放的,也就是在内存上图像的所有数据存放成一行,这中情况在访问时可以提供很