- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenCV类Mat详解OpenCV类Mat详解
类Mat详解
OpenCV c++ n?维稠密数组类
类CV_EXPORTS Mat
{
public:
/ / … …很多的方法...
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,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)。
使用的复制构造函数或赋值运算符可以是一个数组或右侧的表达式(请参阅下图)。正像在导言中指出的,数组赋值运算复杂度是O(1)因为当你需要它的时候,它仅复制头和增加引用计数。
Mat::clone()?方法可用于获取全(深)的副本数组。为另一个数组的一部分构建头。它可以是单个行、?单个列,几个行,几个列,矩形区域(代数中称为较小值)的数组或对角线。这种操作也是复杂度为O(1),因为,新头引用相同的数据。实际上,您可以使用此特性修改该数组的一部分例如:
/ /第?5行,乘以?3,加到第?3?行,
M.row(3) = M.row(3) + M.row (5) * 3 ;
/ /?现在将第7列复制到第1列
/ / M.col(1) = M.col(7) ;/ /?这个不能实现。
Mat??M1= M.col(1) ;
M.col(7).copyTo(M1) ;
/ /?创建一种新的?320 x 240?图像
Mat img(Size(320,240),CV_8UC3) ;
/ /?选择ROI(r
您可能关注的文档
- LINGO软件求解整数规划问题.doc
- linux LCD驱动分析.doc
- Linux+PHP+MySQL课程标准.doc
- linux大作业1组-.doc
- Linux实验报告.doc
- LINUX嵌入式操作系统知识点复习.doc
- Linux简史.doc
- linux期中试题.doc
- Linux汇编语言开发指南.doc
- linux嵌入式系统驱动.doc
- 2025年一级建造师考试《水利水电工程管理与实务》冲刺必刷卷.docx
- 2025年一级建造师考试《水利水电工程管理与实务》逆袭破题卷1.docx
- 2025年一级建造师考试《市政工程管理与实务》冲刺必刷卷 .docx
- 2025年一级造价工程师考试《建设工程计价》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价管理》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价案例分析(安装专业)》预习卷.docx
- 2025年一级造价工程师考试《建设工程造价案例分析(土建专业)》预习卷.docx
- 2025年中级会计考试《会计实务》冲刺提分卷.docx
- 2025年中级会计考试《财务管理》冲刺提分卷.docx
- 2025年中级会计考试《财务管理》全真模拟卷.docx
文档评论(0)