Mat类型可以被认为是OpenCV库的核心。 OpenCV库中绝大多数的函数都是Mat类的成员,以Mat作为参数,或者Mat作为返回值。
Mat类用于表示任意维数的密集数组。即使对于数组中的该条目为零,也存在与该条目相对应的数据值。大多数图像都以密集阵列的形式存储。在稀疏数组的情况下,通常只存储非零条目。如果许多条目都是零,那么可以节省大量的存储空间。使用稀疏数组而不是密集数组的常见情况是直方图。对于许多直方图,大多数条目都是零,并且存储所有这些零不是必需的。对于稀疏数组的情况,OpenCV有另一种数据结构,SparseMat。
如果你熟悉OpenCV库的C接口(2.1之前的版本),您将会记住IplImage和CvMat的数据类型。 你也可能记得CvArr。 在C ++实现中,所有这些都消失了,用Mat代替。Mat类可以用于任何维数的数组。数据被存储在阵列中,被认为是"光栅扫描顺序"的n维数字。这意味着在一维数组中,元素是顺序的。在二维数组中,数据按行组织,每行依次出现。对于三维阵列,每个平面都是逐行填充的。
每个Mat都包含一个标志元素,指示数组内容,一个dims元素指示维数,rows和cols元素指示行数和列数,指向数据指针的位置数组数据被存储,一个类似于Ptr <>的的引用计数器。数据数组被布置成使得其索引由(i0,ii,...&#