概述
OpenCV(Open Source Computer Vision Library)是基于BSD开源许可协议的一套计算机视觉开源库,里面包含了几百个计算机视觉算法。在包括物体识别、人脸识别、图像处理等在内的多种计算机视觉应用领域中被大量应用。
OpenCV的API目前分为1.0和2.0版本(3.0的正式版本在今年也已经出来了,但目前没有去尝试过),1.0版本是用C语言实现的,2.0主要是C++,2.0版本的已显著优化,所以我们学习的也将是2.0版本的OpenCV,我们在上一篇的实例其实使用还是1.0版本的API,但以后就会改成2.0了。
Open里的API
OpenCV 里的模块
OpenCV有着模块化结构,下面是一些我们会常用到的模块:
- core - 定义基本的数据结构和一些底层的方法,被其他模块所调用
- imgproc - 图像处理模块,包含线性和非线性的图像过滤器、几何图像变换、颜色空间转换、直方图均衡等等
- video - 视频分析模块,包括运动估计、背景差分、目标跟踪算法
- calib3d - 3D图像处理模块,有基本的多视角几何算法、立体通信算法、单体和立体相机的标定、对象姿态估计、双目立体匹配算法和元素的三维重建
- features2d - 特征检测、描述、匹配算法模块,包含了显著特征检测算法、描述算子和算子匹配算法
- objdetect - 目标检测模块,包括实物检测和一些预定义的物体的检测,如人脸、眼睛、杯子、行人、汽车等
- highgui - UI接口模块,为视频捕捉、图像和视频编码等功能提供易用的UI接口
- gpu - gpu模块,用于支持其他模块的GPU加速算法
- 。。。。还有一些支持模块,如FLANN等
要用到命名空间
前面说过,OpenCV2.0是基于C++,这在API里有很好的体现,就是2.0所有的API和结构体都是需要声明命名空间的,它们全部在名称空间cv里,例如,当使用Mat时,需要这样:
cv::Mat H;
或者是:
using namespace cv;
void main() {
Mat mat;
}
这是因为OpenCV中有些现存的或者以后新版本中会有一些命名与STL库或者其他库因同名而冲突。如果需要用到两个冲突的类型或函数,就要用cv::显示地声明名称空间。
官方文档下载(英文版)