OpenCV系列(三):Mat详解

Mat类是OpenCV最基本的一个数据类型,它可以表示一个多维的多通道的数组。Mat常用来存储图像,包括单通道二维数组——灰度图,多通道二维数组——彩色图。当然也可以用来存储点云,直方图等等,对于高维的数组可以考虑存储在SparseMat中。对于一个Mat对象M,其数据布局是由M.step[]决定的,数据存放在M.data里面,假设M有d维,则数据的寻址方式为:

\[addr(M_{i_0,...,i_{d-1}}) = M.data + i_0*M.step[0] + ... + i_{d-1}*M.step[d-1] \]

例如\(Img\)是一个二维三通道矩阵,则,

\[addr(Img_{i_0,i_1}) = M.data + i_0*M.step[0] + i_1*M.step[1] \]

这里需要说明的是各个维度的步长满足如下关系:M.step[i] >= M.step[i+1]*M.size[i+1],也就是二维数组的数据的存放是一行一行的,三维数组数据存放是一面一面的。

Read More