网站大量收购闲置独家精品文档,联系QQ:2885784924

OPENCV的MAT类详细讲解.docx

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
参考材料 参考材料 类Mat导言 Ope nCV 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[]定义的,使元素的 地址(io,。。。。iM.dims-i ),其中 0= i k M.size [k],可以计算为: addr( Mi o iM.dims-1 ) = M.data+ M.step[ 0]*i o + M.step[ 1] *i 1 + .…+ M.step[ M:dims- 1] iM:dims- 1 2维的数组的情况下根据上述公式被减至 : addr( M i,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,Scalar(1,3)); / /现在将 M转换为100 x 60的CV_8UC(15)的矩阵。 / /旧内容将会被释放 M.create(100,60,CV_8UC(15)); 这一章导言中指出,当当前的数组与指定的数组的形状或类型 create()分配唯一的新数组 时的形状或类型。 创建多维数组: / /创建 100 x 100 x 100 8 位数组 int sz[] = {100, 100, 100}; Mat. bigCube (3,sz,CV_8U,Scalar::all(0)); 它将维度数 (=1)传递给 Mat 的构造函数,但列 数设置为1时,创建数组将是 2维的。因此,Mat::dims 始终是>=2的(该数组为空时, 也可以是0 )。 使用的复制构造函数或赋值运算符可以是一个数组或右侧的表达式 (请参阅 下图)。正像在导言中指出的,数组赋值运算复杂度是 0(1)因为当你需要它的时候,它仅 复制头和增加引用计数 。Mat::clone()方法可用于获取全(深)的副本数组。 (代数中称为较小值)的数组或对角线。这种操作也是复杂度为 0(1),因为,新头引用 相同的数据。实际上,您可以使用此特性修改该数组的一部分例如 : / /第5行,乘以3,加到第3行, M.row(3) = M.row(3) + M.row (5) * 3 ; / /现在将第7列复制到第1列 / / M

文档评论(0)

乐乐 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档