文章目录结构
1. 简介
OpenCV(Open Source Computer Vision Library:http://opencv.org)是一个开源的基于BSD许可的库,它包括数百种计算机视觉算法。文档OpenCV 2.x API描述的是C++ API,相对还有一个基于C语言的OpenCV 1.x API,后者的描述在文档opencv1.x.pdf中。
OpenCV具有模块化结构,这就意味着开发包里面包含多个共享库或者静态库。下面是可使用的模块:
核心功能(Core functionality) - 一个紧凑的模块,定义了基本的数据结构,包括密集的多维Mat数组和被其他模块使用的基本功能。
图像处理(Image processing) - 一个图像处理模块,它包括线性和非线性图像滤波,几何图形转化(重置大小,放射和透视变形,通用基本表格重置映射),色彩空间转换,直方图等。
影像分析(video) - 一个影像分析模块,它包括动作判断,背景弱化和目标跟踪算法。
3D校准(calib3d) - 基于多视图的几何算法,平面和立体摄像机校准,对象姿势判断,立体匹配算法,和3D元素的重建。
平面特征(features2d) - 突出的特征判断,特征描述和对特征描述的对比。
对象侦查(objdetect) - 目标和预定义类别实例化的侦查(例如:脸、眼睛、杯子、人、汽车等等)。
highgui - 一个容易使用的用户功能界面。
视频输入输出(videoio) - 一个容易使用的视频采集和视频解码器。
GPU - 来自不同OpenCV模块的GPU加速算法。
… 一些其他的辅助模块,比如FLANN和谷歌的测试封装,Python绑定和其他。
接下来的章节将描述每个模块的功能。但首先一定要熟悉在整个库中使用的通用API概念。
2. cv命名空间
所有的OpenCV类和函数都放在cv的命名空间。因此,你的代码去访问这些功能,需要使用cv::字符或者使用命名空间cv;指针。
#include "opencv2/core.hpp"
2 ...
3 cv::Mat H = cv::findHomography(points1, points2, CV_RANSAC, 5);
4 ...
或者:
#include "opencv2/core.hpp"
2 using namespace cv;
3 ...
4 Mat H = findHomography(points1, points2, CV_RANSAC, 5 );
5 ...
一些现在的或者将来的OpenCV外部名称可能会与STL或者其他库有冲突,在这种情况下,需要使用明确的命名空间说明符去解决命名冲突。
Mat a(100, 100, CV_32F);
randu(a, Scalar::all(1), Scalar::all(std::rand()));
cv::log(a, a);
a /= std::log(2.);
3. 自动的内存管理
OpenCV自动处理所有的内存。
首先需要了解的是std:vector、Mat等,这些被函数和方法调用的数据结构中都具