OpenCV入门教程01.03:OpenCV简介
索引地址:系列索引
准备
了解本系列的全部内容之前,需要不完整的C++
。
本系列根据OpenCV官方教程制作,因为官方教程需要付费,所以我根据其提供的教程文档大纲制作本系列教程并根据一些招聘网站的相关要求添加国内需要的技术。
计算机视觉
计算机视觉[1]是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。
定义
计算机视觉是使用计算机及相关设备对生物视觉的一种模拟。它的主要任务就是通过对采集的图片或视频进行处理以获得相应场景的三维信息,就像人类和许多其他类生物每天所做的那样。
计算机视觉是一门关于如何运用照相机和计算机来获取我们所需的,被拍摄对象的数据与信息的学问。形象地说,就是给计算机安装上眼睛(照相机)和大脑(算法),让计算机能够感知环境。我们中国人的成语"眼见为实"和西方人常说的"One picture is worth ten thousand words"表达了视觉对人类的重要性。不难想象,具有视觉的机器的应用前景能有多么地宽广。
计算机视觉既是工程领域,也是科学领域中的一个富有挑战性重要研究领域。计算机视觉是一门综合性的学科,它已经吸引了来自各个学科的研究者参加到对它的研究之中。其中包括计算机科学和工程、信号处理、物理学、应用数学和统计学,神经生理学和认知科学等。
原理
计算机视觉就是用各种成像系统代替视觉器官作为输入敏感手段,由计算机来代替大脑完成处理和解释。计算机视觉的最终研究目标就是使计算机能象人那样通过视觉观察和理解世界,具有自主适应环境的能力。要经过长期的努力才能达到的目标。因此,在实现最终目标以前,人们努力的中期目标是建立一种视觉系统,这个系统能依据视觉敏感和反馈的某种程度的智能完成一定的任务。例如,计算机视觉的一个重要应用领域就是自主车辆的视觉导航,还没有条件实现像人那样能识别和理解任何环境,完成自主导航的系统。因此,人们努力的研究目标是实现在高速公路上具有道路跟踪能力,可避免与前方车辆碰撞的视觉辅助驾驶系统。这里要指出的一点是在计算机视觉系统中计算机起代替人脑的作用,但并不意味着计算机必须按人类视觉的方法完成视觉信息的处理。计算机视觉可以而且应该根据计算机系统的特点来进行视觉信息的处理。但是,人类视觉系统是迄今为止,人们所知道的功能最强大和完善的视觉系统。如在以下的章节中会看到的那样,对人类视觉处理机制的研究将给计算机视觉的研究提供启发和指导。因此,用计算机信息处理的方法研究人类视觉的机理,建立人类视觉的计算理论,也是一个非常重要和信人感兴趣的研究领域。这方面的研究被称为计算视觉(Computational Vision)。计算视觉可被认为是计算机视觉中的一个研究领域。
OpenCV介绍
OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效-OpenCV用C++
语言编写,它的主要接口也是C++
语言,但是依然保留了大量的C语言接口同时提供了Python、Java、Ruby、MATLAB、C#、GO等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。这些语言的API接口函数可以通过在线文档获得。OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。所有新的开发和算法都是用C++
接口。一个使用CUDA的GPU接口也于2010年9月开始实现。最新版本是4.4.0 ,2020年7月16日发布 。
应用领域
- 人机交互
- 目标识别
- 图像分割
- 人脸识别
- 动作识别
- 运动跟踪
- 机器人
- 运动分析
- 机器视觉
- 结构分析
- 汽车安全驾驶
参考手册
OpenCV或者别的语言软件开发时,总会遇到不会或者需要查找资料。在此,我推荐官方参考资料。可以搜索关键词、查看函数说明、入门教程、官方实例代码。
- OpenCV官方网址:官方网站
- OpenCV github地址:github地址
- OpenCV附加模块Github地址:github地址
- 官方参考手册在线索引地址:官方在线手册下载索引地址
- OpenCV4.7.0版在线参考手册地址:OpenCV4.7.0在线地址
模块介绍
主模块是主代码仓库opencv
中的编译结果,而额外模块在opencv_contrib
中源码编译的结果,不编译就没有。
每个模块对应一个dll文件。
名称 | 功能 | 备注 |
---|---|---|
core | 核心模块(Mat定义等等) | 主模块 |
imgproc | 图像处理(大小转换等等) | 主模块 |
imgcodecs | 图像文件读写 | 主模块 |
videoio | 视频输入输出 | 主模块 |
highgui | 界面显示模块 | 主模块 |
video | 视频分析模块 | 主模块 |
calib3d | 相机校正和三维重建 | 主模块 |
features2d | 二维特征框架 | 主模块 |
objdetect | 目标检测模块 | 主模块 |
dnn | 深度神经网络模块 | 主模块 |
ml | 机器学习 | 主模块 |
flann | 多维空间中的聚类和搜索 | 主模块 |
photo | 相片处理模块 | 主模块 |
stitching | 图像拼接 | 主模块 |
gapi | 使常规图像处理快速、便携。 这两个目标是通过引入一种新的基于图的执行模型来实现的。 | 主模块 |
alphamat | 字母映射的信息流算法实现。 该模块专门用于计算给定输入图像和输入TRIMAP图像的阿尔法匹配。 | 额外模块 |
aruco | 该模块专门用于方形基准标记(也称为增强现实标记), 这些标记用于简单、快速和健壮的摄像机姿态估计。 | 额外模块 |
bgsegm | 改进的背景-背景分割方法 | 额外模块 |
bioinspired | 该模块提供生物视觉系统模型(人类视觉系统等)。 它还提供了利用这些生物启发模型的衍生对象。 | 额外模块 |
ccalib | 自定义校准模式,用于三维重建 | 额外模块 |
cnn_3dobj | 3D对象识别和姿态估计 | 额外模块 |
cudaarithm | 关于矩阵的操作进行cuda支持 | 额外模块 |
cudabgsegm | 支持cuda的bgsegm模块 | 额外模块 |
cudacodec | cuda加速的视频编解码 | 额外模块 |
cudafeatures2d | cuda加速的特征检测和描述 | 额外模块 |
cudafilters | cuda加速的图像滤波模块 | 额外模块 |
cudaimgproc | cuda版的imgproc模块 | 额外模块 |
cudalegacy | 包含之前版本的宏定义等等 | 额外模块 |
cudaobjdetect | cuda加速的对象检测模块 | 额外模块 |
cudaoptflow | cuda加速的光学流处理模块 | 额外模块 |
cudastereo | cuda加速的立体通信模块 | 额外模块 |
cudawarping | cuda加速的图像扭曲模块 | 额外模块 |
cudev | cuda设备通信层 | 额外模块 |
cvv | 用于计算机视觉程序交互式视觉调试的GUI程序 | 额外模块 |
datasets | 常用数据集处理框架 | 额外模块 |
dnn_objdetect | 用于目标检测的深度神经网络 | 额外模块 |
dnn_superres | 用于超分辨率的深度神经网络 | 额外模块 |
dpm | 基于部件的变形模型 | 额外模块 |
face | 面部分析 | 额外模块 |
freetype | 用Freetype/harfbuzz绘制UTF-8字符串 | 额外模块 |
fuzzy | 基于数学的图像模糊处理 | 额外模块 |
hdf | 层次数据格式I/O例程 | 额外模块 |
hfs | 高效图像分割的层次特征选择 | 额外模块 |
img_hash | 该模块实现了不同的图像哈希算法。 | 额外模块 |
intensity_transform | 该模块带来了强度变换算法的实现,以调整图像对比度。 | 额外模块 |
julia | OpenCV的julia(一种编程语言类似于脚本)接口 | 额外模块 |
line_descriptor | 从图像中提取的线条的二进制描述子 | 额外模块 |
optflow | 光学流体算法 | 额外模块 |
ovis | OGRE(跨平台三维框架)三维可视化 | 额外模块 |
phase_unwrapping | 相位解除包装API | 额外模块 |
plot | Mat数据的Plot(plot在python中用于图形显示)绘图功能 | 额外模块 |
quality | 图像质量分析接口 | 额外模块 |
rapid | 基于轮廓的三维物体跟踪 | 额外模块 |
reg | 配准模块实现参数化图像配准。 实现的方法是直接对齐, 即直接使用像素值来计算一对图像之间的配准,而不是基于特征的配准。 | 额外模块 |
rgbd | rgb级处理 | 额外模块 |
saliency | 许多计算机视觉应用程序可能会受益于理解人类关注的场景。 除了认知理解人类感知图像和场景的方式外, 在图像中找到突出的区域和对象有助于各种任务, 如加快对象检测、对象识别、对象跟踪和内容感知图像编辑。 | 额外模块 |
sfm | 运动物体结构检测 | 额外模块 |
shape | 形状距离和匹配 | 额外模块 |
stereo | 立体通信算法 | 额外模块 |
structured_light | 结构光被认为是获取三维模型的最有效的技术之一。 这种技术是基于投射一个光模式,并从一个或多个角度捕捉被照亮的场景。 由于模式是编码的,可以快速找到投影模式的图像点和点之间的对应关系, 并且易于检索三维信息。 | 额外模块 |
superres | 超分辨率 | 额外模块 |
surface_matching | 表面匹配 | 额外模块 |
text | 场景文本检测与识别 | 额外模块 |
tracking | 目标跟踪接口 | 额外模块 |
videostab | 视频稳定模块 | 额外模块 |
viz | 三维可视化模块 | 额外模块 |
xfeatures2d | 额外的二维特征框架 | 额外模块 |
ximgproc | 扩展的图像处理模块 | 额外模块 |
xobjdetect | 扩展对象检测模块 | 额外模块 |
xphoto | 额外的照片处理算法 | 额外模块 |
参考资料
- 来自
计算机视觉
百度百科 ↩