精通人脸识别01:opencv介绍
一、OpenCV介绍
OpenCV于1999年由Gary Bradsky在英特尔创立,第一个版本于2000年问世。随后Vadim Pisarevsky加入了Gary Bradsky,主要负责管理英特尔的俄罗斯软件OpenCV团队。2005年,OpenCV被用于Stanley车型,并赢得2005年DARPA大挑战。后来,它在Willow Garage的支持下持续并积极发展,转为由Gary Bradsky和Vadim Pisarevsky领导该项目。OpenCV现在支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,支持各种编程语言,如C ++,Python,Java等,可以在不同的系统平台上使用,包括WindowsLinux,OS X,Android和iOS。基于CUDA和OpenCL的高速GPU操作接口也在积极开发中。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。
二、应用领域
1、人机互动
2、物体识别
3、图像分割
4、人脸识别
5、动作识别
6、运动跟踪
7、机器人
8、运动分析
9、机器视觉
10、结构分析
11、汽车安全驾驶
图像数据的操作 ( 分配、释放、复制、设置和转换)。 图像是视频的输入输出I/O (文件与摄像头的输入、图像和视频文件输出)。
矩阵和向量的操作以及线性代数的算法程序(矩阵积、解方程、特征值以及奇异值等)。
各种动态数据结构(列表、队列、集合、树、图等)。
基本的数字图像处理(滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等)。
结构分析(连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等)。
摄像头定标(发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应)。
运动分析(光流、运动分割、跟踪)。
目标识别(特征法、隐马尔可夫模型:HMM)。
基本的GUI (图像与视频显示、键盘和鼠标事件处理、滚动条)
三、OpenCV具有模块化结构,即包含多个共享库或者静态库,模块结构如下:
- 核心功能(Core functionality) - 一个紧凑的模块,定义了基本的数据结构,包括密集的多维Mat数组和被其他模块使用的基本功能。
- 图像处理(Image processing) - 一个图像处理模块,它包括线性和非线性图像滤波,几何图形转化(重置大小,放射和透视变形,通用基本表格重置映射),色彩空间转换,直方图等。
- 影像分析(video) - 一个影像分析模块,它包括动作判断,背景弱化和目标跟踪算法。
- 3D校准(calib3d) - 基于多视图的几何算法,平面和立体摄像机校准,对象姿势判断,立体匹配算法,和3D元素的重建。
- 平面特征(features2d) - 突出的特征判断,特征描述和对特征描述的对比。
- 对象侦查(objdetect) - 目标和预定义类别实例化的侦查(例如:脸、眼睛、杯子、人、汽车等等)。
- highgui - 一个容易使用的用户功能界面。
- 视频输入输出(videoio) - 一个容易使用的视频采集和视频解码器。
- GPU - 来自不同OpenCV模块的GPU加速算法。
- … 一些其他的辅助模块,比如FLANN和谷歌的测试封装,Python绑定和其他。
四、基于统计学机器学习库
- Boosting算法
- Decision Tree(决策树)学习
- Gradient Boosting算法
- EM算法(期望最大化)
- KNN算法
- 朴素贝叶斯分类
- 人工神经网络
- 随机森林
- 支掌向量机
五、重要更新:
OpenCV 4.0 现在是一个 C++11 库,要求 C++11 兼容的编译器。所需的 CMake 至少是 3.5.1 版本。移除 OpenCV 1.x 中的大量 C API。core 模块中的 Persistence(用于存储和加载 XML、YAML 或 JSON 格式的结构化数据)可以完全使用 C++ 来重新实现,因此这里的 C API 也被移除。添加了新模块 G-API,它可作为基于图的高效图像处理流程。dnn 模块包括实验用 Vulkan 后端,且支持 ONNX 格式的网络。实现了流行的 Kinect Fusion 算法,且为 CPU 和 GPU (OpenCL) 进行优化。objdetect 模块中添加了二维码检测器和解码器。将高效、高质量的 DIS dense optical flow 算法从 opencv_contrib 移到 video 模块。
此外,OpenCV 4.0 支持 Mask-RCNN 模型,性能也有所提升,图像处理操作可实现 15%-30% 的速度提升。