opencv学习笔记(四十)——再谈opencv数据结构mat详解_第1页
opencv学习笔记(四十)——再谈opencv数据结构mat详解_第2页
opencv学习笔记(四十)——再谈opencv数据结构mat详解_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Comment A1: 只是建立的矩阵的头 部OpenCV学习笔记(四十) 再谈 OpenCV数据结构 Mat 详解 分类: OpenCV 2011-12-28 10:331464人阅读评论(7)收藏举报 我记得开始接触 OpenCV就是因为一个算法里面需要2维动态数组,那时候看 core这部分 也算是走马观花吧,随着使用的增多,对 Mat这个结构越来越喜爱,也觉得有必要温故而 知新,于是这次再看看 Mat。 Mat最大的优势跟 STL很相似,都是对 内存进行动态的管理,不需要之前用户手动的管理 内存,对于一些大型的开发,有时候投入的 lpImage内存管理的时间甚至比关注算法实现 的时间还要多,这显然是不合适的。除了有些嵌入式场合必须使用 c语言,我任何时候都 强烈像大家推荐 Mat。 Mat这个类有两部分数据。一个是 matrix header,这部分的大小是固定的,包含矩阵的大 小,存储的方式,矩阵存储的地址等等。另一个部分是一个指向矩阵包含像素值的指针。 cppview plaincopy Mat A, C; / creates just the header parts A = imread(argv1, CV_LOAD_IMAGE_COLOR); / here well know the method used (allocate matrix) Mat B(A); / Use the copy constructor C = A; / Assignment operator 需要注意的是,copy 这样的操作只是 copy了矩阵的 matrix header和那个指针,而不是 矩阵的本身,也就意味着两个矩阵的数据指针指向的是同一个地址,需要开发者格外注 意。比如上面这段程序,A、 B、C 指向的是同一块数据,他们的 header不同,但对于 A的操作同样也影响着 B、C 的结果。刚刚提高了内存自动释放的问题,那么当我不再使 用 A的时候就把内存释放了,那时候再操作 B和 C岂不是很危险。不用担心,OpenCV 的大神为我们已经考虑了这个问题,是在最后一个 Mat不再使用的时候才会释放内存, 咱们就放心用就行了。 如果想建立互不影响的 Mat,是真正的复制操作,需要使用函数 clone()或者 copyTo()。 说到数据的存储,这一直就是一个值得关注的问题,Mat_对应的是 CV_8U,Mat_对应的是 CV_8U,Mat_对应的是 CV_8S,Mat_对应 的是 CV_32S,Mat_对应的是 CV_32F,Mat_对应的是 CV_64F,对应的 数据深度如下: CV_8U - 8-bit unsigned integers ( 0255 ) CV_8S - 8-bit signed integers ( -128127 ) CV_16U - 16-bit unsigned integers ( 065535 ) CV_16S - 16-bit signed integers ( -3276832767 ) CV_32S - 32-bit signed integers ( -21474836482147483647 ) CV_32F - 32-bit oating-point numbers ( -FLT_MAXFLT_MAX, INF, NAN ) CV_64F - 64-bit oating-point numbers ( -DBL_MAXDBL_MAX, INF, NAN ) 这里还需要注意一个问题,很多 OpenCV 的函数支持的数据深度只有8位和32位的,所以 要少使用 CV_64F,但是 vs 的编译器又会把 float 数据自动变成 double 型,有些不太爽。 还有个需要注意的问题,就是流操作符(3, 3)这样

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论