1. OpenCV 概念

图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理。

图像处理技术一般包括图像压缩, 增强和复原, 匹配、描述和识别 3 个部分。图像处理一般指数字图像处理( Digital Image Processing )。其中, 数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组。该数组的元素称为像素,其值称为灰度值。而数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。

OpenCV 的全称是 Open Source Computer Vision Library , 直译就是“开源计算机视觉库”。取代表开源的单词“Open”、“Computer ” 的首字母“C” 以及“ Vision ”的首字母“V”,组合命名为 OpenCV

OpenCV 是一个基于开源发行的跨平台计算机视觉库, 它实现了图像处理和计算机视觉方面的很多通用算法,已经成为了计算机视觉领域最有力的研究工具之一。

OpenCV 由一系列 C 函数和 C++ 类构成,拥有包括 500 多个 C 函数的跨平台的中高层 API。 OpenCV 的设计目标是执行速度尽量快, 主要关注实时应用。它采用优化的 C/C++ 代码编写,能够充分利用多核处理器的优势, 其主要目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关
应用程序。

OpenCV 还提供 MLL ( Machine Learning Library ) 机器学习库。该机器学习库主要用于统计方面的模式识别和聚类( clustering )。

  • OpenCV 官方主页:http://opencv.org
  • OpenCV Github 主页:https://github.com/opencv/opencv
  • OpenCV 开发版 Wiki 主页:http://code.opencv.org

2. OpenCV 整体架构

/usr/local/include/opencv4/opencv2 目录下,会发现上述文件夹中有个名为 opencv_modules.hpphpp 文件,里面存放的是OpenCV 中与新模块构造相关的说明代码,打开可以发现其定义的是 OpenCV 所有组件的宏,具体如下。

wohu@wohu:/usr/local/include/opencv4/opencv2$ cat opencv_modules.hpp
/**      ** File generated automatically, do not modify **** This file defines the list of modules available in current build configuration**
*/// This definition means that OpenCV is built with enabled non-free code.
// For example, patented algorithms for non-profit/non-commercial use only.
/* #undef OPENCV_ENABLE_NONFREE */#define HAVE_OPENCV_CALIB3D
#define HAVE_OPENCV_CORE
#define HAVE_OPENCV_DNN
#define HAVE_OPENCV_FEATURES2D
#define HAVE_OPENCV_FLANN
#define HAVE_OPENCV_GAPI
#define HAVE_OPENCV_HIGHGUI
#define HAVE_OPENCV_IMGCODECS
#define HAVE_OPENCV_IMGPROC
#define HAVE_OPENCV_ML
#define HAVE_OPENCV_OBJDETECT
#define HAVE_OPENCV_PHOTO
#define HAVE_OPENCV_STITCHING
#define HAVE_OPENCV_VIDEO
#define HAVE_OPENCV_VIDEOIOwohu@wohu:/usr/local/include/opencv4/opencv2$

工程文件包含路径为 /usr/local/include/opencv4 ,该目录各个模块文件夹如下:

wohu@wohu:/usr/local/include/opencv4/opencv2$ ls
calib3d      features2d      highgui.hpp    objdetect           stitching.hpp
calib3d.hpp  features2d.hpp  imgcodecs      objdetect.hpp       video
core         flann           imgcodecs.hpp  opencv.hpp          video.hpp
core.hpp     flann.hpp       imgproc        opencv_modules.hpp  videoio
cvconfig.h   gapi            imgproc.hpp    photo               videoio.hpp
dnn          gapi.hpp        ml             photo.hpp
dnn.hpp      highgui         ml.hpp         stitching
wohu@wohu:/usr/local/include/opencv4/opencv2$

下面就是 OpenCV 的所有模块, 按照宏定义的顺序依次介绍。

2.1 calib3d

Calibration (校准)和 3D 这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容,包括基本的多视角几何算法、单个立体摄像头标定、物体姿态估计、立体相似性算法、3D 信息的重建等。

2.2 core

核心功能模块,包含如卜内容:

  • OpenCV 基本数据结构
  • 动态数据结构
  • 绘图函数
  • 数组操作相关函数
  • 辅助功能与系统函数和宏
  • OpenGL 的互操作

2.4 features2d

人类视觉系统倾向于从给定场景中提取主要特征,然后记住它,这样便于后续的检索。为了模仿这一点,人们开
始设计各种特征提取器,用于从给定的图像中提取出这些特征点。

流行的算法包括尺度不变特征变换(Scale Invariant Feature Transform,简称SIFT)、加速鲁棒特征(Speeded Up Robust Features,简称SURF)和加速分段测试特征(Features From Accelerated Segment Test,简称FAST)。

也就是 Features2D , 即 2D 功能框架, 包含如下内容:

  • 特征检测和描述
  • 特征检测器(Feature Detectors) 通用接口
  • 描述符提取器(Descriptor Extractors) 通用接口
  • 描述符匹配器(Descriptor Matchers ) 通用接口
  • 通用描述符(Generic Descriptor) 匹配器通用接口
  • 关键点绘制函数和匹配功能绘制函数

2.5 flann

Fast Library for Approximate Nearest Neighbors , 高维的近似近邻快速搜索算法库,包含以下两个部分:

  • 快速近似最近邻搜索
  • 聚类

2.7 highgui

高层 GUI 图形用户界面,可用于处理所有高级用户界面操作,包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容。

它有一个等待功能,可以等你按下键盘上的一个键才进入下一步。还有一个可以检测鼠标事件的功能,在开发交互式应用程序时非常有用。

2.9 imgproc

ImageProcess 这两个单词的缩写组合,图像处理模块。包含如下内容:

  • 线性和非线性的图像滤波
  • 图像的几何变换
  • 其他图像转换
  • 直方图相关
  • 结构分析和形状描述
  • 运动分析和对象跟踪
  • 特征检测
  • 目标检测等内容

可以执行诸如图像过滤、形态学操作、几何变换、颜色转换、图像绘制、直方图、形状分析、运动分析、特征检测等操作。

2.10 ml

Machine Learning ,机器学习模块,基本上是统计模型和分类算法,包含如下内容:

  • 统计模型( Statistical Models)
  • 一般贝叶斯分类器(Normal Bayes Classifier)
  • K-近邻(K-Nearest Neighbors)
  • 支持向量机(Support Vector Machines)
  • 决策树(DecisionTrees)
  • 提升(Boosting)
  • 梯度提高树(Gradient Boosted Trees)
  • 随机树(Random Trees)
  • 超随机树(Extremely randomized trees)
  • 期望最大化(Expectation Maximization)
  • 神经网络(Neural Networks)
  • MLData

它还有一个名为快速近似最近邻搜索库(Fast Approximate Nearest Neighbor Search Library,简称 FLANN)的模块,其中包含用于在大型数据集中进行快速最近邻搜索的算法。

2.11 objdetect

目标检测模块,包含 Cascade Classification (级联分类)和 Latent SVM 这两个部分。对象检测是指检测给定图像中对象的位置。此过程与对象类型无关。

如果你设计一个椅子检测器,它不会告诉你给定图像中的椅子是高靠背红色的,还是蓝色低靠背的,它只会告诉你椅子的位置。

2.12 photo

Computational Photography ,包含图像修复和图像去噪两部分。计算摄影是指使用先进的图像处理技术来改善相机捕获的图像。

计算摄影并不专注于光学过程和图像捕捉方法,而是使用软件来操纵视觉数据。其应用领域包括高动态范围成像,全景图像、图像补光和光场相机等。

2.13 stitching

images stitching ,图像拼接模块,包含如下部分:

  • 拼接流水线
  • 特点寻找和匹配图像
  • 估计旋转
  • 自动校准
  • 图片歪斜
  • 接缝估测
  • 曝光补偿
  • 图片混合

2.14 video

视频分析包括诸如分析视频中连续帧之间的运动、跟踪视频中的不同目标、创建视频监控模型等任务。该模块包括运动估计、背景分离、对象跟踪等视频处理相关内容。

2.15 videoio

videoio 模块可以处理与视频文件的输入和输出相关的所有操作。可以轻松地从网络摄像头捕获视频,或以多种不同格式读取视频文件。甚至可以通过设置诸如每秒帧数、帧大小等属性来将很多帧保存为视频文件。

2.16 人脸和对象识别

人脸识别是指识别给定图像中的人物。这与人脸检测不同,在人脸检测中,只需要识别给定图像中人脸的位置。
如果你想建立一个可以识别相机前面的人的实用的生物识别系统,首先需要运行一个人脸检测器来识别人脸的位置,然后运行一个单独的人脸识别器来识别该人是谁。有一个名为 faceOpenCV 模块用于处理人脸识别。

正如我们之前讨论的那样,计算机视觉试图按照人类感知视觉数据的方式对算法进行建模。因此,在图像中找到显著的区域和对象将是有帮助的,这可以帮助我们处理不同的应用,例如目标识别、目标检测和跟踪等。一个名为 saliency 的模块是专门为此目的而设计的。它提供的算法可以检测静态图像和视频中的显著区域。

2.17 表面匹配

Kinect 是捕获深度信息和视觉数据的一个很好的设备例子,它现在能够识别输入的3D对象,并将其与数据库中的模型匹配。如果我们有一个可以识别和定位对象的系统,那么它就可以用于许多不同的应用程序。

一个名为 surface_matching 的模块包含用于 3D 对象识别的算法,以及使用 3D 特征的姿势估计算法。

2.18 文本检测与识别

一个名为 text 的模块包含处理文本检测和识别的各种算法。

3. OpenCV 3 新版本改进

GitHub 中, 除了存放着正式版 OpenCV 的主仓库和新增加的 opencv_extra 仓库以外, OpenCV 3.0 中还添加了一个名为 opencv_contrib 的全新仓库, 这个新仓库中有很多让人兴奋的功能:包括脸部识别和文本探测,以及文本识别、新的边缘检测器、充满艺术感的图像修复、深度地图处理、新的光流和追踪算法等。

OpenCV 主仓库的地址:https://github.com/opencv/opencv
opencv_extra 仓库地址:https://github.com/opencv/opencv_extra
opencv contrib 仓库地址:https://github.com/opencv/opencv_contrib

正式版 opencvopencv_contrib 之间的区别如下:

  • 两者都由 OpenCV 官方幵发团队持续集成系统维护, 虽然目前 opencv_contrib 仓库中的代码测试并没有完成, 很多功能不稳定。
  • 主体的 OpenCVGitHub 中由 Itseez 提供,其有着非常稳定的 API 以及少部分的创新。
  • opencv_contrib 仓库是大多数实验性代码放置的地方,一些 API 可能会有改变,一直会欢迎广大开发者们贡献新的精彩算法。
  • opencv contrib 中的这些额外模块可以在 CMake 中用 OPENCV_EXTRA_MODULES_PATH=/modules 传递给 CMake 文件, 和 OpenCV3 主体中的代码一起编译和运行。
  • opencv_contrib 的文档是自动生成的,可以在 http://docs.opencv.org/master/ 中找到,并会在随后的版本中更加完善。

OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能相关推荐

  1. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  2. 学习笔记(01):2019Java微服务架构2.0-Vue-通信1

    立即学习:https://edu.csdn.net/course/play/25600/310625?utm_source=blogtoedu 保存笔记

  3. Tomcat学习笔记(2)- 整体架构

    文章目录 1. Server组件 2. Service组件 3. Connector组件 4. Engine组件 5. Host组件 6. Context组件 7. Wrapper组件 8. 处理请求 ...

  4. 华为fusionsphere整体架构及其各组件功能_华为数据之道:面向业务的信息架构建设...

    华为的数字化转型已经成为行业公认的标杆,最近的畅销书<华为数据之道>对华为的数字化转型方法和经验进行了系统性地披露.企业的数字化转型,最重要的是数据治理,其次是信息架构的建设,本文将通过& ...

  5. 【Linux】Linux内核的整体架构简介

    文章目录 0.前言 1.Linux 内核的核心功能 2.Linux内核的整体架构 3.Linux源代码目录结构 参考 0.前言 本文是笔者学习Linux系统的记录性文章故引用和参考较多,参考文章见文末 ...

  6. opencv学习笔记01

    原创博文地址:opencv学习笔记01 学习目标 1,opencv能做什么,不能做什么 2,阅读代码,知道某种func后图片怎么样了 3,在图片相关机器学习算法预处理阶段,希望通过对图片的简单处理,达 ...

  7. OpenCV笔记-图像预处理1

    OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...

  8. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  9. Maven-学习笔记01【基础-Maven基本概念】

    Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...

最新文章

  1. oozie 重新提交作业
  2. mysql 关键字 status_Mysql show status命令详解
  3. select weui 动态加载数据_weui中的picker使用js进行动态绑定数据问题
  4. android开发过程中的错误:the file dx.jar was not loaded from the SDK folder
  5. 注意力机制并不是关注输入的位置
  6. python中numpy矩阵运算操作大全(非常全)!
  7. selece * from jb51 where id45
  8. PowerPoint2003制作抛物线动画的方法
  9. MathType7.0嵌入Office2019教程
  10. 监狱人员定位管理,提升智慧监狱信息化水平
  11. 计算机控制技术廖道争答案,2017年三峡大学电气与新能源学院专业目录及考试科目...
  12. 域名注册_申请证书\SSL证书\tls证书
  13. linux下写脚本时-gt或-lt是什么意思?
  14. 04.配置unp.h头文件出现开启 xinetd daytime 服务时 /etc/xinetd.d下 没有daytime 文件的解决办法
  15. Scrum之团队绩效评估
  16. 微信公众号代运营的的技巧有哪些(1)
  17. 如何在数字前加上0,如将1变成01
  18. python爬取电影天堂
  19. C4D 克隆 学习笔记
  20. Ubuntu18.04屏幕分辨率问题

热门文章

  1. 2022-2028年中国加密货币交易所市场研究及前瞻分析报告
  2. Java EE学习心得
  3. 解决烦人的img与input不能水平对齐的问题
  4. Redis 高级特性(1)—— 事务 过期时间 排序
  5. 用python给自己写一个加密算法
  6. python实现简单的用户密码登录控制(输入三次就锁定用户)
  7. Git最新版从零开始详细教程(迅速搞定~)
  8. SECTIONS bss段初始化分析
  9. 地面标识检测与识别算法
  10. 2021年大数据常用语言Scala(十一):基础语法学习 方法参数