类 Mat导言 OpenCV c + + n 维稠密数组类 类 CV_EXPORTS Mat { public: / / … … 很多的方法... ... /*!包括几位字段: -神奇的签名 -连续性标志 -深度(Note:应该是位深) -通道数 */ int flags;(Note :目前还不知道flags 做什么用的) //!数组的维数,> = 2 int dims ; //!行和列的数量或 (-1,-1) 此时数组已超过 2 维 int rows,cols; //!指向数据的指针 uchar *data ; //!指针的引用计数器; / / 阵列指向用户分配的数据时,当指针为 NULL int * refcount ; / / 其他成员 ... }; Mat 类表示一个 n 维的密集数值单通道或多通道数组。它可以用于存储实数或复数值的向量和矩阵、灰度或彩色图像、体素、向量场、点云、张量、直方图(尽管较高维的直方图存储在 SparseMat 可能更好)。M 数组的数据布局是由阵列 M.step[]定义的,使元素的地址(i0,。。。。iM.dims-1),其中 0<= ik < M.size [k],可以计算为: addr( Mi0 ;:::;iM.dims-1) = M.data+ M.step[ 0]*i0 + M.step[ 1] *i1 + .… + M.step[ M:dims- 1] iM:dims- 1 2 维的数组的情况下根据上述公式被减至: addr( Mi,j)= M.data+ M.step[ 0]*i+ M.step[ 1] *j 请注意,M.step[i] > =M.step[i+1] (事实上,M.step[i] > =M.step[i+1]*M.size[i+1])。这意味着2 维矩阵是按行存储的,3 维矩阵是由平面存储,以此类推。M.step[M.dims-1] 是最小的而且总是等于元素大小M.elemSize()。因此,Mat 中的数据布局完全兼容OpenCV 1.x 中CvMat、 IplImage、 CvMatND 类型。它也和标准工具包和 SDK,如 Numpy(ndarray),Win32(独立设备位图)等主流的密集数组类型相兼容,也就是说,与任何使用步进(或步长)来计算像素位置的阵列相兼容。由于这种兼容性,使用户分配的数据创建 Mat 头以及用OpenCV 函数实时处理该头成为可能。有很多不同的方法,创建一个 Mat 的对象。下面列出了最常见的选项: 使用 create(nrows,ncols,type)方法或类似的Mat(nrows,ncols,type [,fillValue]) 构造函数。一个新的指定了大小和类型的数组被分配。type 和 cvCreateMat 方法中的type参数具有相同的含义。例如,CV_8UC1 是指一个 8 位单通道阵列,CV_32FC2 指 2 通道 (复)浮点阵列,以此类推。 //创建一个用 1+3j 填充的 7 x 7 复矩阵。 Mat M(7,7,CV_32FC2,S...