opencv学习笔记(四十)——再谈opencv数据结构mat详解

opencv学习笔记(四十)——再谈opencv数据结构mat详解

ID:17010509

大小:42.00 KB

页数:3页

时间:2018-08-26

opencv学习笔记(四十)——再谈opencv数据结构mat详解_第1页
opencv学习笔记(四十)——再谈opencv数据结构mat详解_第2页
opencv学习笔记(四十)——再谈opencv数据结构mat详解_第3页
资源描述:

《opencv学习笔记(四十)——再谈opencv数据结构mat详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解分类:OpenCV2011-12-2810:331464人阅读评论(7)收藏举报我记得开始接触OpenCV就是因为一个算法里面需要2维动态数组,那时候看core这部分也算是走马观花吧,随着使用的增多,对Mat这个结构越来越喜爱,也觉得有必要温故而知新,于是这次再看看Mat。Mat最大的优势跟STL很相似,都是对内存进行动态的管理,不需要之前用户手动的管理内存,对于一些大型的开发,有时候投入的lpImage内存管理的时间甚至比关注算法实现的时间

2、还要多,这显然是不合适的。除了有些嵌入式场合必须使用c语言,我任何时候都强烈像大家推荐Mat。Mat这个类有两部分数据。一个是matrixheader,这部分的大小是固定的,包含矩阵的大小,存储的方式,矩阵存储的地址等等。另一个部分是一个指向矩阵包含像素值的指针。[cpp]viewplaincopyprint?1MatA,C;//createsjusttheheaderparts只是建立的矩阵的头部2A=imread(argv[1],CV_LOAD_IMAGE_COLOR);//herewe’llknowt

3、hemethodused(allocatematrix)3MatB(A);//Usethecopyconstructor4C=A;//Assignmentoperator需要注意的是,copy这样的操作只是copy了矩阵的matrixheader和那个指针,而不是矩阵的本身,也就意味着两个矩阵的数据指针指向的是同一个地址,需要开发者格外注意。比如上面这段程序,A、B、C指向的是同一块数据,他们的header不同,但对于A的操作同样也影响着B、C的结果。刚刚提高了内存自动释放的问题,那么当我不再使用A的时候就

4、把内存释放了,那时候再操作B和C岂不是很危险。不用担心,OpenCV的大神为我们已经考虑了这个问题,是在最后一个Mat不再使用的时候才会释放内存,咱们就放心用就行了。如果想建立互不影响的Mat,是真正的复制操作,需要使用函数clone()或者copyTo()。说到数据的存储,这一直就是一个值得关注的问题,Mat_对应的是CV_8U,Mat_对应的是CV_8U,Mat_对应的是CV_8S,Mat_对应的是CV_32S,Mat_对应的是CV_32F

5、,Mat_对应的是CV_64F,对应的数据深度如下:•CV_8U-8-bitunsignedintegers(0..255)•CV_8S-8-bitsignedintegers(-128..127)•CV_16U-16-bitunsignedintegers(0..65535)•CV_16S-16-bitsignedintegers(-32768..32767)•CV_32S-32-bitsignedintegers(-2147483648..2147483647)•CV_32F-32-bi

6、tfloating-pointnumbers(-FLT_MAX..FLT_MAX,INF,NAN)•CV_64F-64-bitfloating-pointnumbers(-DBL_MAX..DBL_MAX,INF,NAN)otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939ser

7、vedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyCommitteeSecretaryandrecorderoftheCou

8、ntypartyCommitteeSecretary,Ministersand这里还需要注意一个问题,很多OpenCV的函数支持的数据深度只有8位和32位的,所以要少使用CV_64F,但是vs的编译器又会把float数据自动变成double型,有些不太爽。还有个需要注意的问题,就是流操作符<<对于Mat的操作,仅限于Mat是2维的情况。还有必要说一下Mat的存储是逐行的存储的。再说说Mat的创建,方式有两种,罗列

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。