OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能
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.orgOpenCV Github
主页:https://github.com/opencv/opencvOpenCV
开发版Wiki
主页:http://code.opencv.org
2. OpenCV 整体架构
在 /usr/local/include/opencv4/opencv2
目录下,会发现上述文件夹中有个名为 opencv_modules.hpp
的 hpp
文件,里面存放的是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
Image
和 Process
这两个单词的缩写组合,图像处理模块。包含如下内容:
- 线性和非线性的图像滤波
- 图像的几何变换
- 其他图像转换
- 直方图相关
- 结构分析和形状描述
- 运动分析和对象跟踪
- 特征检测
- 目标检测等内容
可以执行诸如图像过滤、形态学操作、几何变换、颜色转换、图像绘制、直方图、形状分析、运动分析、特征检测等操作。
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 人脸和对象识别
人脸识别是指识别给定图像中的人物。这与人脸检测不同,在人脸检测中,只需要识别给定图像中人脸的位置。
如果你想建立一个可以识别相机前面的人的实用的生物识别系统,首先需要运行一个人脸检测器来识别人脸的位置,然后运行一个单独的人脸识别器来识别该人是谁。有一个名为 face
的 OpenCV
模块用于处理人脸识别。
正如我们之前讨论的那样,计算机视觉试图按照人类感知视觉数据的方式对算法进行建模。因此,在图像中找到显著的区域和对象将是有帮助的,这可以帮助我们处理不同的应用,例如目标识别、目标检测和跟踪等。一个名为 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
正式版 opencv
与 opencv_contrib
之间的区别如下:
- 两者都由
OpenCV
官方幵发团队持续集成系统维护, 虽然目前opencv_contrib
仓库中的代码测试并没有完成, 很多功能不稳定。 - 主体的
OpenCV
在GitHub
中由 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 概念、整体架构、各模块主要功能相关推荐
- HTML/CSS学习笔记01【概念介绍、基本标签】
w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...
- 学习笔记(01):2019Java微服务架构2.0-Vue-通信1
立即学习:https://edu.csdn.net/course/play/25600/310625?utm_source=blogtoedu 保存笔记
- Tomcat学习笔记(2)- 整体架构
文章目录 1. Server组件 2. Service组件 3. Connector组件 4. Engine组件 5. Host组件 6. Context组件 7. Wrapper组件 8. 处理请求 ...
- 华为fusionsphere整体架构及其各组件功能_华为数据之道:面向业务的信息架构建设...
华为的数字化转型已经成为行业公认的标杆,最近的畅销书<华为数据之道>对华为的数字化转型方法和经验进行了系统性地披露.企业的数字化转型,最重要的是数据治理,其次是信息架构的建设,本文将通过& ...
- 【Linux】Linux内核的整体架构简介
文章目录 0.前言 1.Linux 内核的核心功能 2.Linux内核的整体架构 3.Linux源代码目录结构 参考 0.前言 本文是笔者学习Linux系统的记录性文章故引用和参考较多,参考文章见文末 ...
- opencv学习笔记01
原创博文地址:opencv学习笔记01 学习目标 1,opencv能做什么,不能做什么 2,阅读代码,知道某种func后图片怎么样了 3,在图片相关机器学习算法预处理阶段,希望通过对图片的简单处理,达 ...
- OpenCV笔记-图像预处理1
OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...
- 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】
视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...
- Maven-学习笔记01【基础-Maven基本概念】
Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...
最新文章
- oozie 重新提交作业
- mysql 关键字 status_Mysql show status命令详解
- select weui 动态加载数据_weui中的picker使用js进行动态绑定数据问题
- android开发过程中的错误:the file dx.jar was not loaded from the SDK folder
- 注意力机制并不是关注输入的位置
- python中numpy矩阵运算操作大全(非常全)!
- selece * from jb51 where id45
- PowerPoint2003制作抛物线动画的方法
- MathType7.0嵌入Office2019教程
- 监狱人员定位管理,提升智慧监狱信息化水平
- 计算机控制技术廖道争答案,2017年三峡大学电气与新能源学院专业目录及考试科目...
- 域名注册_申请证书\SSL证书\tls证书
- linux下写脚本时-gt或-lt是什么意思?
- 04.配置unp.h头文件出现开启 xinetd daytime 服务时 /etc/xinetd.d下 没有daytime 文件的解决办法
- Scrum之团队绩效评估
- 微信公众号代运营的的技巧有哪些(1)
- 如何在数字前加上0,如将1变成01
- python爬取电影天堂
- C4D 克隆 学习笔记
- Ubuntu18.04屏幕分辨率问题