前言
刚入门OpenCV不久,觉得Mat是非常关键的东东,于是收集了许多资料结合自己的体会整理这篇深入剖析的文章。话不多说,直接进入主题。
Mat剖析
1, 前世与今生
OpenCV 自 2001 年出现以来。在那些日子里库是围绕C接口构建的。在那些日子里,他们使用名为IplImage C 的结构在内存中存储图像[1]。而C结构最大的问题是要程序员自己分配和管理内存,当代码量大了,管理成本就很高,而导致不能着眼于真正要解决的实际问题。
随c++的出现,引入类的概念,于是OpenCV2.0版本开始引入C++接口,不需要手动内存管理了,使用起来也更加方便了。这个引入的C++结构就是伟大的图像容器类Mat。
2,庐山真面目
是时候上这副著名的图了,直接祭出来。
从这张图中,我们明显地可以得出这样一个事实:人类看到的是图像,而计算机看到的是这种数字矩阵。计算机通过矩阵来认识一张图片并存储它,也就是说Mat的本质其实就是矩阵/多维数组。
再来看看C++中Mat的详细定义,追根溯源,窥其源码:
class CV_EXPORTS Mat
{
public:
// 一堆函数
// ...
// 以下是主要成员变量
// <1>
/*! includes several bit-fields:
- the magic signature
- continuity flag
-