概述


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::显示地声明名称空间。

官方文档下载(英文版)