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_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_3dobj3D对象识别和姿态估计额外模块
cudaarithm关于矩阵的操作进行cuda支持额外模块
cudabgsegm支持cuda的bgsegm模块额外模块
cudacodeccuda加速的视频编解码额外模块
cudafeatures2dcuda加速的特征检测和描述额外模块
cudafilterscuda加速的图像滤波模块额外模块
cudaimgproccuda版的imgproc模块额外模块
cudalegacy包含之前版本的宏定义等等额外模块
cudaobjdetectcuda加速的对象检测模块额外模块
cudaoptflowcuda加速的光学流处理模块额外模块
cudastereocuda加速的立体通信模块额外模块
cudawarpingcuda加速的图像扭曲模块额外模块
cudevcuda设备通信层额外模块
cvv用于计算机视觉程序交互式视觉调试的GUI程序额外模块
datasets常用数据集处理框架额外模块
dnn_objdetect用于目标检测的深度神经网络额外模块
dnn_superres用于超分辨率的深度神经网络额外模块
dpm基于部件的变形模型额外模块
face面部分析额外模块
freetype用Freetype/harfbuzz绘制UTF-8字符串额外模块
fuzzy基于数学的图像模糊处理额外模块
hdf层次数据格式I/O例程额外模块
hfs高效图像分割的层次特征选择额外模块
img_hash该模块实现了不同的图像哈希算法。额外模块
intensity_transform该模块带来了强度变换算法的实现,以调整图像对比度。额外模块
juliaOpenCV的julia(一种编程语言类似于脚本)接口额外模块
line_descriptor从图像中提取的线条的二进制描述子额外模块
optflow光学流体算法额外模块
ovisOGRE(跨平台三维框架)三维可视化额外模块
phase_unwrapping相位解除包装API额外模块
plotMat数据的Plot(plot在python中用于图形显示)绘图功能额外模块
quality图像质量分析接口额外模块
rapid基于轮廓的三维物体跟踪额外模块
reg配准模块实现参数化图像配准。 实现的方法是直接对齐,
即直接使用像素值来计算一对图像之间的配准,而不是基于特征的配准。
额外模块
rgbdrgb级处理额外模块
saliency许多计算机视觉应用程序可能会受益于理解人类关注的场景。
除了认知理解人类感知图像和场景的方式外,
在图像中找到突出的区域和对象有助于各种任务,
如加快对象检测、对象识别、对象跟踪和内容感知图像编辑。
额外模块
sfm运动物体结构检测额外模块
shape形状距离和匹配额外模块
stereo立体通信算法额外模块
structured_light结构光被认为是获取三维模型的最有效的技术之一。
这种技术是基于投射一个光模式,并从一个或多个角度捕捉被照亮的场景。
由于模式是编码的,可以快速找到投影模式的图像点和点之间的对应关系,
并且易于检索三维信息。
额外模块
superres超分辨率额外模块
surface_matching表面匹配额外模块
text场景文本检测与识别额外模块
tracking目标跟踪接口额外模块
videostab视频稳定模块额外模块
viz三维可视化模块额外模块
xfeatures2d额外的二维特征框架额外模块
ximgproc扩展的图像处理模块额外模块
xobjdetect扩展对象检测模块额外模块
xphoto额外的照片处理算法额外模块

参考资料

  1. 来自计算机视觉百度百科

OpenCV入门教程01.03:OpenCV简介
https://blog.jackeylea.com/opencv/preface-of-opencv/
作者
JackeyLea
发布于
2020年5月8日
许可协议