- OpenCV 教程
- OpenCV - 首页
- OpenCV - 概述
- OpenCV - 环境配置
- OpenCV - 图像存储
- OpenCV - 读取图像
- OpenCV - 写入图像
- OpenCV - 图形用户界面 (GUI)
- 绘图函数
- OpenCV - 绘制圆形
- OpenCV - 绘制直线
- OpenCV - 绘制矩形
- OpenCV - 绘制椭圆
- OpenCV - 绘制多边形
- OpenCV - 绘制凸多边形
- OpenCV - 绘制带箭头的直线
- OpenCV - 添加文本
- 滤波
- OpenCV - 双边滤波
- OpenCV - 方框滤波
- OpenCV - 平方盒滤波
- OpenCV - Filter2D
- OpenCV - 膨胀
- OpenCV - 腐蚀
- OpenCV - 形态学操作
- OpenCV - 图像金字塔
- Sobel 算子
- OpenCV - Sobel 算子
- OpenCV - Scharr 算子
- 摄像机和人脸检测
- OpenCV - 使用摄像机
- OpenCV - 图片中的人脸检测
- 使用摄像机进行人脸检测
- OpenCV 有用资源
- OpenCV - 快速指南
- OpenCV - 有用资源
- OpenCV - 讨论
OpenCV - 概述
OpenCV是一个跨平台库,我们可以用它来开发实时的**计算机视觉应用程序**。它主要关注图像处理、视频捕捉和分析,包括人脸检测和物体检测等功能。
让我们从定义“计算机视觉”这个术语开始本章节。
计算机视觉
计算机视觉可以定义为一个学科,它解释了如何根据场景中存在的结构属性,从其二维图像重建、解释和理解三维场景。它处理使用计算机软件和硬件模拟和复制人类视觉。
计算机视觉与以下领域有很大的重叠:
**图像处理** - 它专注于图像处理。
**模式识别** - 它解释了各种分类模式的技术。
**摄影测量学** - 它关注从图像中获取精确测量。
计算机视觉与图像处理
**图像处理**处理图像到图像的转换。图像处理的输入和输出都是图像。
**计算机视觉**是从图像中构建对物理对象的明确、有意义的描述。计算机视觉的输出是对三维场景中结构的描述或解释。
计算机视觉的应用
这里列出了一些计算机视觉大量使用的主要领域。
机器人应用
定位 - 自动确定机器人位置
导航
避障
组装(销孔、焊接、喷漆)
操控(例如 PUMA 机器人机械手)
人机交互 (HRI) - 智能机器人与人互动并服务于人
医学应用
- 分类和检测(例如病变或细胞分类和肿瘤检测)
- 二维/三维分割
- 三维人体器官重建(MRI 或超声波)
- 视觉引导机器人手术
工业自动化应用
- 工业检验(缺陷检测)
- 组装
- 条形码和包装标签读取
- 物体分拣
- 文档理解(例如 OCR)
安全应用
生物特征识别(虹膜、指纹、人脸识别)
监控 - 检测某些可疑活动或行为
交通应用
- 自动驾驶车辆
- 安全,例如驾驶员警觉性监控
OpenCV 库的特性
使用 OpenCV 库,您可以:
读取和写入图像
捕捉和保存视频
处理图像(滤波、变换)
执行特征检测
检测视频或图像中特定物体,例如人脸、眼睛、汽车。
分析视频,即估计视频中的运动、减去背景以及跟踪视频中的物体。
OpenCV 最初是用 C++ 开发的。除此之外,还提供了 Python 和 Java 绑定。OpenCV 运行在各种操作系统上,例如 Windows、Linux、OSx、FreeBSD、Net BSD、Open BSD 等。
本教程将使用 Java 绑定,通过示例来解释 OpenCV 的概念。
OpenCV 库模块
以下是 OpenCV 库的主要库模块。
核心功能
此模块涵盖了用于构建 OpenCV 应用程序的基本数据结构,例如 Scalar、Point、Range 等。除此之外,它还包括多维数组**Mat**,用于存储图像。在 OpenCV 的 Java 库中,此模块作为名为**org.opencv.core**的包包含。
图像处理
此模块涵盖了各种图像处理操作,例如图像滤波、几何图像变换、颜色空间转换、直方图等。在 OpenCV 的 Java 库中,此模块作为名为**org.opencv.imgproc**的包包含。
视频
此模块涵盖了视频分析概念,例如运动估计、背景减法和目标跟踪。在 OpenCV 的 Java 库中,此模块作为名为**org.opencv.video**的包包含。
视频输入/输出
此模块解释了使用 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 接管。