OpenCV Mat相关结构体详细介绍 [0]

背景

众所周知,Mat是OpenCV最核心的核心数据结构,没有这个灵活高效的Mat,OpenCV也就没有了灵魂。

作为一个初学者,只需要会简单用一下Mat当然就够了,但是作为一个有理想的程序猿,我们还是要挖掘挖掘,看看Mat里面还藏着什么宝藏。

mat.hpp

我们将目光投向OpenCV/modules/core/include/opencv2/core/mat.hpp,这个3600多行(v3.4.1)的头文件,就藏着OpenCV最深处的秘密,我们尝试逐步揭开它!

首先我们需要关注的是,究竟有哪些类?

类的枚举

方法很简单,只需要在这个文件中,搜索class关键词,然后顺着一个个列出来,就得到了如下的列表:

  • _InputArray
  • _OutputArray
  • _InputOutputArray
  • MatAllocator
  • MatCommaInitializer_
  • Mat
  • Mat_
  • Umat
  • SparseMat
  • SparseMat_
  • MatConstItrator
  • MatConstIterator_
  • MatIterator_
  • SparseMatConstIterator
  • SparseMatIterator
  • SparseMatConstIterator_
  • SparseMatIterator_
  • NaryMatIterator
  • MatOP
  • MatExpr

这个文件中一共有20个class声明的结构,其中16个class的名字中有"Mat",其余四个都是"Array"。

类的关系

有了这个粗略的认识,我们再来看看他们之间的关系,在class的基础上,再看看有没有 : public关键词,也就是看这些类有没有父类,找一圈,发现如下关系:

class基类
_OutputArray_InputArray
_InputOutputArray_OutputArray
Mat_Mat
SparseMat_SparseMat
MatConstIterator_MatConstItrator
MatIterator_MatConstIterator_<_Tp>
SparseMatIteratorSparseMatConstIterator
SparseMatConstIterator_SparseMatConstIterator
SparseMatIterator_SparseMatConstIterator_<_Tp>

可以看到他们之间的关系还是比较简单的,最多有两层继承关系,且有继承关系的,名字都长得差不多,这减少了我们认知的难度。

类的实现

在得到他们的关系之后,我们要开始逐个击破了,对这些c++的类,我们已经找到了声明,接下来就要找找他们的实现了。继续搜!

class实现
_InputArraymatrix_wrap.cpp
_OutputArraymatrix_wrap.cpp
_InputOutputArraymat.inl.hpp
MatAllocatormatrix.cpp
MatCommaInitializer_mat.inl.hpp
Matmatrix.cpp
Mat_mat.inl.hpp
Umatumatrix.cpp
SparseMatmat.inl.hpp
SparseMat_mat.inl.hpp
MatConstItratormat.inl.hpp
MatConstIterator_mat.inl.hpp
MatIterator_mat.inl.hpp
SparseMatConstIteratormat.inl.hpp
SparseMatIteratormat.inl.hpp
SparseMatConstIterator_mat.inl.hpp
SparseMatIterator_mat.inl.hpp
NaryMatIteratormatrix_iterator.cpp
MatOPmatrix_expressions
MatExprmatrix_expressions

我们可以看到,这些类主要是包含在6个文件中,其中Mat和Mat_主要是在matrix.cpp和umatrix.cpp中,还有一些也是在mat.inl.hpp中,矩阵操作相关的,大部分在matrix_expressions.cpp中,其余的实现都在mat.inl.hpp中。

结论

我们尝试对OpenCV的核心数据结构Mat及其相关类做一个介绍,在本文中我们主要是列出来有哪些类,并整理了他们的关系,还找到他们各自的实现。接下来我们就要逐个击破,争取能对所有类都能有个深入的认识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值