说到计算机图形处理,首选工具为opencv(免费,开源,成熟项目,提供多种语言接口)。以下将统一使用opencv开发语言C++作为程序语言。C++ 的opencv说难也难,说容易也容易。如果读者熟悉C++精髓之模板类、模板函数、函数重载、继承等知识点,学习opencv本身会像学习STL那么容易并且很多两者间互相通用或者极其相似。话说回来,为了更加详细地跟大家讨论算法细节,我会花些篇幅介绍opencv的一些基本知识,在介绍的同时也就会讨论算法本身。
先来说说opencv里面的一些基本数据结构吧。
- C语言基本数据结构(类如 int,float,double等等)
- 标准模板库里定义的数据类型(如opencv大量使用的vector)
- opencv自定义的抽象数据类型或者结构体(如 Vec,Matx等)
前两种就不详说了,不懂的翻查C++ primer。让我们主要纠结第三种,这也是本节重点。
其实opencv自定义的数据结构基本都是向量和矩阵,向量又是矩阵的一个特殊子类,无非是只有一列的矩阵,但仍然有很大的意义专门介绍一下向量。下面我们从最基本的Matx开始,然后看各种向量类是如何继承Matx类的。
Matx类是opencv自定义的矩阵类,用来保存矩阵的各种信息,其更是一种模板类,所以使我们可以自定义类的数据类型。Matx类有如下初始形式:
比如要建立一个元素为浮点的3X3矩阵,可以Matx<float,3,3> mat来初始。
Ve