OpenCV简介
OpenCV是一个跨平台的库,使用它我们可以开发实时的计算机视觉应用程序。 它主要集中在图像处理,视频采集和分析,包括人脸检测和物体检测等功能。
这一章,让我们通过定义术语“计算机视觉”来开始。
计算机视觉
计算机视觉可以被定义为一个学科,解释如何根据场景中存在的结构的属性,从其2D图像重构,中断和理解3D场景。 它使用计算机软件和硬件处理建模和复制人类视觉。
计算机视觉与以下领域显着重叠 -
- 图像处理 - 它着重于图像处理。
- 模式识别 - 它解释了分类模式的各种技术。
- 摄影测量 - 它涉及从图像获得准确的测量。
计算机视觉与图像处理
图像处理涉及图像到图像的转换。 图像处理的输入和输出都是图像。
计算机视觉是从物体形象中对物理物体进行明确而有意义的描述。 计算机视觉的输出是对3D场景中结构的描述或解释。
计算机视觉的应用
在这里,我们列举了计算机视觉大量使用的一些主要领域。
机器人应用
- 本地化 - 自动确定机器人位置
- 导航
- 避免障碍
- 装配(挂孔,焊接,喷漆)
- 操作(例如PUMA机器人操作器)
- 人机交互(HRI) - 智能机器人与人交互和服务
医学应用
- 分类和检测(例如病变或细胞分类和肿瘤检测)
- 2D/3D分割
- 3D人体器官重建(MRI或超声)
- 视觉引导机器人手术
工业自动化应用
- 工业检查(缺陷检测)
- 部件
- 条码和包装标签读取
- 对象排序
- 文档理解(例如OCR)
安全应用
- 生物识别(虹膜,指纹,脸部识别)
- 监视 - 检测某些可疑活动或行为
交通运输应用
- 自主车辆
- 安全,例如驾驶员警惕性监控
OpenCV库的特点
使用OpenCV库,可以 -
- 读取和写入图像
- 捕获并保存视频
- 过程图像(过滤,变换)
- 执行功能检测
- 检测视频或图像中的特定对象,例如脸部,眼睛,汽车。
- 分析视频,即估计其中的运动,减去背景,并跟踪其中的对象。
OpenCV最初是用C++开发的。 除此之外,还提供了Python和Java绑定。 OpenCV可以在各种操作系统上运行,如Windows,Linux,OSx,FreeBSD,Net BSD,Open BSD等。
本教程通过使用Java绑定的示例解释了OpenCV的概念。
OpenCV库模块
以下是OpenCV库的主要库模块。
核心功能
该模块涵盖了用于构建OpenCV应用程序的基本数据结构,如标量,点,范围等。 除此之外,还包括用于存储图像的多维数组Mat
。 在OpenCV的Java库中,这个模块包含在一个名字为org.opencv.core
的包内。
图像处理
该模块涵盖了各种图像处理操作,如图像过滤,几何图像转换,颜色空间转换,直方图等。在OpenCV的Java库中,该模块包含在一个名称为org.opencv.imgproc
的包内。
视频
本模块涵盖了运动估测,背景扣除和对象跟踪等视频分析概念。 在OpenCV的Java库中,这个模块包含在一个名字为org.opencv.video
的包内。
视频I/O
本模块解释了使用OpenCV库的视频捕获和视频编解码器。 在OpenCV的Java库中,该模块由名称为org.opencv.videoio
的包提供。
calib3d
该模块包括有关基本多视图几何算法,单个和立体摄像机标定,对象姿态估计,立体对应和三维重建元素的算法。 在OpenCV的Java库中,该模块由名称为org.opencv.calib3d
的软件包提供。
features2d
该模块包含特征检测和描述的概念。 在OpenCV的Java库中,该模块由名称org.opencv.features2d
的包提供。
Objdetect
该模块包括检测对象和预定义类的实例,例如面孔,眼睛,杯子,人物,汽车等。在OpenCV的Java库中,该模块由名称为org.opencv.objdetect
的包提供。
Highgui
这是一个易于使用的界面,具有简单的UI功能。 在OpenCV的Java库中,这个模块的功能包含在两个不同的包中,即org.opencv.imgcodecs
和org.opencv.videoio
。
OpenCV简史
OpenCV最初是英特尔研究计划,为CPU密集型应用提供建议。 它于1999年正式启动。
- 在2006年,它的第一个主要版本,OpenCV 1.0发布。
- 2009年10月,第二个主要版本OpenCV 2发布。
- 2012年8月,OpenCV被非营利组织OpenCV.org采用。