OpenCV是什么?
发布时间:2021-04-29 11:03:05
OpenCV是什么
在说OpenCV之前要说一下什么是计算机视觉,计算机视觉是在图像基础上发展起来的一门新兴学科,计算机视觉是研究让机器如何看世界,认识这个五彩缤纷的世界,就是让摄像头代替人眼来对目标进行识别,跟踪和测量,并进一步对捕获的图像数据(视频数据)转换成一种新的表达方式或者一个新的决策的过程!在转换过程中进行的转换都是为了达到某一目标。
举个列子:通过输入设备(摄像头、扫描仪)将前方1米处发现的物体输入到电脑中,并对这些数据进行处理,然后与数据库里的模型比对,那么最后得到的决策可能是前方有一辆汽车或者站着一个人,处理的过程可能是把彩色图像转换成单通道的灰色图(灰色图要比彩色图容易处理后面会说为什么),对图像降噪声,或者通过图像序列分析去除摄像机晃动的影响,这些转换过程/处理过程最终将会转换成一种新的决策,表达方式!
随着计算机视觉的诞生,人工智能技术也随着和诞生,其中人工智能技术中生物识别技术能从计算机处理的图像数据(多维数据)中获取信息,并对这个信息进行识别,并做相应的处理,人工智能领域下有很多技术比如最著名的机器学习等等这里就不做太多的详细介绍,后面学到机器学习时会和大家详细介绍人工智能技术下各个领域作用!
因为计算机视觉是计算机学科所以在、工程、信号处理、物理学、应用数学和统计学、神经生理学和认知科学等都有研究方面,在制造业、检验、文档分析、医疗诊断、和军事等领域等各种智能/自主应用方面,都有非常广阔的前景发展!
人类本身是视觉动物,所以人类觉得可以很容易实现计算机视觉,假如说让你从一个场景中找到一辆汽车,显然很容易,因为汽车本身较大,容易被眼睛所捕获,但是其中在捕获的过程中有着很复杂的过程:
人脑将视觉信号划分入很多个通道,将各种不同的信息输入你的大脑。你的大脑有一个关注系统,会根据任务识别出场景的重要部分,并做重点分析,而其他部分则分析的较少。在人类视觉流中存在着大量的反馈,但是目前人类对之了解甚少。肌肉控制的传感器以及其他所有传感器的输入信息之间存在着广泛的关联,这使得大脑可以依赖从出生以来所学到的信息,在大脑中反馈信息。
所以我们要想真正的实现一个人工智能产品的话就要把人类自己本身的所有信息模拟到计算机上,比如大脑=CPU,眼睛=摄像头,感官=传感器,并且要让之间协调工作,相对来说是非常复杂的!
其次计算机接受到的数据主要来源于摄像头,磁盘文件中的数值矩阵:
图1.1(取之《学习OpenCV》)中的汽车有一个反光镜但是计算机只看到一组数值矩阵:
图1.1
由于该图是单通道(黑白图)所以一个矩阵数值就可以表示一个像素点,如果是多通道的RGB颜色就需要三个数值表示,比如194210 201表示一个像素点,而单通道194就可以表示像素点!
其中非常令人头疼的问题就是图像噪声:
左:正常图片右:带图像噪声的图片
如果一张图里每个像素点上都掺杂着图像噪声的话会降低图像识别的准确率,图像噪声产生的问题主要来自输入设备(摄像机)。
假如我们要做一个能够自动把房间里掉地上的书捡起来放到书架上,那么我们需要从这个房间场景中找出我们所需要的目标物品:书。
假如说这个人的房间非常大或者在客厅,那么时首先如果从右到左或者从左到右采用地毯式的搜索的话会需要进行大量的分析算法同时因为CPU运算单元会进行过多的算法运算一直处于高电平状态。会加快消耗机器人的电能,在这样的情况下我们可以告诉机器人书一般会在某个地方出现:书柜、桌子、床上,沙发的周边地区。然后将这三个模型导入到捡书机器人的比对数据库里,首先一点是在拍摄这些配对模型时,要将物品放到最能表现其特征的地方:“正中心位置”。
有了这些信息之后那么机器人可以很快的过滤掉场景中书籍不可能会掉落的地方,那么机器人可以很快的找出书籍并放到书架上!当然你也可以给机器人安装激光扫描仪使其捕获的物品体积使其在机器训练时用捕获的数据与模型数据进行校正时更加准确!
就像上面说的,要从一个房间里找到书可以根据特征来寻找加快寻找时间,那么在找到一个目标时首先要将这个目标转换成二维图,也就是说三维图是立体的,存在前后之分,而二维图不存在前后之分,只有宽高,为什么要转换成二维图?
二维图的方法就是从一个三维图(立体)中根据二维特征(平面)将二维数据提取出来并映射到另外一个图像数据上!
可以看到二维图可以更好的方便识别所需表面特征!
OpenCV是计算机视觉开源库,主要算法涉及图像处理和机器学习相关方法。可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
最新版本是OpenCV4.5.1,Opencv采用C/C++编写在不同的系统环境上只要稍微修改一下代码就可以编译通过,可以在Mac/Linux/Windows系统上运行,并且为python,Ruby,MATLAB等编程语言提供接口!
OpenCV在设计时的目标就是执行速度尽量快所以内部函数都是标C函数来编写的,如果想要起到硬件加速(内部函数用IPP优化)需要购买IPP库,购买IPP库后OpenCV在运行时会自动调用IPP库做优化!
目前OpenCV应用领域非常广泛,在医疗设备、工厂检验、立体视觉、机器学习、人脸别识别、图像拼接、生物医学分析、无人机、等人工智能领域有广泛应用,OpenCV可谓大显身手,而这些,仅仅是其应用的冰山一角!
甚至计算机视觉可以用在声谱图上,对声音和音乐进行分析!
并且计算机视觉被广泛应用于工厂检验,大规模的产品制造在流水线上的某一环节都使用计算机视觉做检测!
在多数图像处理相关的应用程序中被采用,BSD许可,可以免费应用在商业和研究领域,OpenCV开源协议允许你使用OpenCV库的全部代码,生成商业产品,并且不需要公开源代码,或对OpenCV库中的算法改善后的算法!
如今,来自世界各地的各大公司、科研机构的研究人员,共同维护支持着opencv的开源库开发。这些公司和机构包括:微软,IBM,索尼、西门子、google、intel、斯坦福、MIT、CMU、剑桥等。
在学习OpenCV之前要懂得C/C++编程,和一些数学基础!
- 上一篇:Linux模拟实现僵尸进程
- 下一篇:关于死锁的一系列问题