| core | 核心模块,是定义基本数据结构的模块,也包括库中所有其他模块使用的基本函数 |
| imgproc | 图像处理模块,包括图像滤波、几何图像变换、颜色空间变换和直方图 |
| imgcodecs | 图像文件读写 |
| highgui | 高级GUI,提供UI功能的接口,可以执行以下操作:创建和操作可以显示的窗口、将滑动条添加到窗口、键盘命令和处理鼠标事件等 |
| videoio | 视频I/O,视频捕获和视频编解码器的接口 |
| video | 视频分析模块,包括背景减法、运动估计和目标跟踪算法 |
| calib3d | 摄像机标定和三维重建,包括基本的多视点几何算法、立体匹配算法、目标姿态估计、单摄像机和立体摄像机标定以及三维重建 |
| features2d | 二维特征框架,该模块包括特征检测器、描述符和描述符匹配器 |
| objdetect | 目标检测,检测预定义类的对象和实例(例如,人脸、眼睛、人和汽车) |
| dnn | 深度神经网络(Deep neural network, DNN)模块,本模块包含以下内容:用于创建新层的API、一组预定义的常用层、从层构造和修改神经网络的API、从不同深度学习框架加载序列化网络模型的功能等 |
| ml | 机器学习库(Machine Learning Library, MLL)是一组可用于分类、回归和聚类目的的类和方法 |
| flann | 快速近似近邻库(Fast Library for Approximate Nearest Neighbors, FLANN)是一组非常适合快速近邻搜索的算法,用于多维空间中的聚类和搜索 |
| photo | 计算摄影,提供一些计算摄影的函数 |
| stitching | 图像拼接,实现了一个自动拼接全景图像的拼接流水线 |
| shape | 形状距离和匹配模块,可用于形状匹配、检索或比较 |
| superres | 超分辨率,包含一组可用于提高分辨率的类和方法 |
| videostab | 视频稳定,包含一组用于视频稳定的类和方法 |
| viz | 三维可视化工具,用于显示与场景交互的小部件 |
OpenCV应用场景
OpenCV 可以应用但不仅限于以下场景:二维和三维特征提取、街景图像拼接、人脸识别系统、手势识别、人机交互、动作识别、物体识别、自动检查和监视、分割与识别、医学图像分析、运动跟踪、增强现实、视频/图像搜索与检索、机器人与无人驾驶汽车导航与控制、驾驶员疲劳驾驶检测等。
OpenCV图像处理基础
图像基础
接下来,首先从理论上介绍图像的相关概念。
图像处理中的主要问题
我们看可以把图像看作是三维世界的二维视图,那么数字图像作为2D图像,可以使用称为像素的有限数字集进行表示(像素的概念将在像素、颜色、通道、图像和颜色空间部分中详细解释)。我们可以,将计算机视觉的目标定义为将这些2D数据转换为以下内容:
- 新的数据表示(例如,新图像)
- 决策目标(例如,执行具体决策任务)
- 目标结果(例如,图像的分类)
- 信息提取(例如,目标检测)
在进行图像处理时,经常会遇到以下问题:
- 图像的模糊性,由于受到透视的影响,从而会导致图像视觉外观的变化。例如,从不同的角度看同一个物体会产生不同的图像;
- 图像通常会受许多自然因素的影响,如光照、天气、反射和运动;
- 图像中的一部分对象也可能会被其他对象遮挡,使得被遮挡的对象难以检测或分类。随着遮挡程度的增加,图像处理的任务(例如,图像分类)可能非常具有挑战性。
为了更好的解释上述问题,我们假设需要开发一个人脸检测系统。该系统应足够鲁棒,以应对光照或天气条件的变化;此外,该系统应该可以处理头部的运动——用户头部可以在坐标系中每个轴上进行一定程度的动作(抬头、摇头和低头,用户可以离相机稍近或稍远的情况)。而许多人脸检测算法在人脸接近正面时表现出良好的性能,但是,如果一张脸不是正面的(例如,侧面对着镜头),算法就无法检测到它。此外,算法需要即使在用户戴着眼镜或太阳镜时,也可能需要检测面部(即使这会在眼睛区域产生遮挡)。综上所述,当开发一个计算机视觉项目时,我们必须综合考虑到所有这些因素,一个很好的表征方法是有使用大量测试图像来验证算法。我们也可以根据测试图像的不同困难程度来对它们进行分类,以便于检测算法的弱点,提高算法的鲁棒性。
图像处理流程
完整的图像处理程序通常可以分为以下三个步骤:
- 读取图像,图像的获取可以有多种不同的来源(相机、视频流、磁盘、在线资源),因此图像的读取可能涉及多个函数,以便可以从不同的来源读取图像;
- 图像处理,通过应用图像处理技术来处理图像&#