1 什么是OpenCV?

Xsens动作捕捉 2023-04-05 5560

从今天开始,我准备从opencv和halcon这两个图像库的基础开始,做成一系列的opencv和halcon的学习资料,主要借鉴国外的一些资料。也没有什么别的目的,纯属爱好。平时时间有限,有时间就弄一下了。有兴趣的可以学一学。计算机视觉已经应用在很多场合了,因此,在此系统的整理一套资料,不要零散的弄一些东西,太零散了学习起来不够系统,可能收获不多。

OpenCV在计算机视觉的发展中发挥了重要的作用,使成千上万的人能够在视觉上做更多的工作。 OpenCV允许学生,研究人员,专业人员和创业者高效地实施项目,并通过向他们提供可在多种平台上优化的计算机视觉架构。

OpenCV是一个开源的计算机视觉库,可从http://opencv.org获得。 1999年,在英特尔公司工作的Gary Bradski发布了OpenCV,希望为在该领域工作的人提供基础架构来加速计算机视觉和人工智能的发展。该库以C和C ++编写,可在Linux,Windows和Mac OS X下运行。在Python,Java,MATLAB和其他语言的接口上也进行了开发,包括将库移植到Android和iOS以用于移动应用程序。多年来,OpenCV从英特尔和谷歌获得了很多支持,特别是来自Itseez,它完成了大部分早期开发工作。最后,Arraiy加入进来并保持永远开放和免费的http://OpenCV.org。 OpenCV专为提高计算效率而设计,并且非常注重实时应用程序。它采用优化的C ++编写,可以利用多核处理器。如果您希望进一步自动优化英特尔架构,则可以购买英特尔的集成性能基元库(IPP)库,它包含许多不同算法领域的低级优化例程。如果安装了该库,OpenCV会在运行时自动使用相应的IPP库。从OpenCV 3.0开始,英特尔授予OpenCV团队和OpenCV社区IPP的免费子集,该子集默认内置并加速OpenCV。

OpenCV的目标之一是提供一个简单易用的计算机视觉基础库,帮助人们快速构建复杂的视觉应用程序。 OpenCV库包含超过500个涵盖视觉领域的功能,包括产品检测,医疗成像,安全性,用户界面,摄像机校准,立体视觉和机器人。 由于计算机视觉和机器学习是分不会开的,OpenCV还包含一个完整的通用机器学习库(ML模块)。 这个子库着重于统计模式识别和聚类。 ML模块对于OpenCV任务核心的视觉任务非常有用,但它也适用于任何机器学习问题。

谁使用OpenCV?

大多数计算机科学家和实用程序员都知道计算机视觉的某些角色,但很少有人知道计算机视觉的所有使用方式。例如,大多数人都知道它在监控中的用途,许多人也知道它越来越多地被用于网络上的图像和视频。然而,越来越少的人意识到大多数空中和街道地图图像大量使用摄像机校准和图像拼接技术。有些人意识到在安全监控,无人驾驶飞行器或生物医学分析方面的应用。但很少有人知道机器视觉在制造业中的普及程度如何:几乎所有大规模生产的产品都已经通过计算机视觉自动检测。 OpenCV的开放源代码许可证的结构使您可以使用全部或部分OpenCV构建商业产品。OpenCV在全球很受欢迎,在中国,日本,俄罗斯,欧洲和以色列拥有大量的用户群体。自从1999年1月发布alpha版以来,OpenCV已经被用于许多应用,产品和研究工作。这些应用包括在卫星和网络地图,图像扫描对齐,医学图像降噪,对象分析,安全和入侵检测系统,自动监测和安全系统,制造检查系统,摄像机校准,军事应用和无人驾驶天线中拼接图像,地面和水下车辆。它甚至被用于声音和音乐识别。

什么是计算机视觉?

计算机视觉是将来自静止或摄像机的数据转换成新的表示方式。所有这些转变都是为了实现某个特定的目标。输入数据可能包含一些上下文信息,例如“相机安装在汽车中”或“激光测距仪指示物体距离1米”。该决定可能是“这个场景中有人”或“这张幻灯片中有14个肿瘤细胞”。新的表示方式可能意味着将彩色图像转变为灰度图像或从图像序列中移除相机运动。很多时候我们可能愚蠢地认为计算机视觉任务很容易。当你在一张图像中盯着它时,找到一辆汽车有多难?人脑将视觉信号分成许多通道,将不同类型的信息传输到大脑中。你的大脑有一个注意力系统,它以一种依赖于任务的方式识别图像的重要部分,同时抑制对其他区域的检查。在视觉流中有大量的反馈,但至今还很少被人理解。肌肉控制传感器和其他所有感官都有广泛的联想输入,使大脑能够利用多年生活经验。大脑中的反馈环路可以回溯到所有处理阶段,包括硬件传感器本身(眼睛),它们通过虹膜机械控制照明并调整视网膜表面的接收。然而,在机器视觉系统中,计算机从相机接收数字信号,大多数情况下,没有内置模式识别功能,没有焦点和光圈的自动控制,没有多年的经验。大多数情况下,视觉系统仍然相当天真。图1显示了一辆汽车的照片。在这幅图中,我们在车的驾驶员侧看到了一面侧视镜。计算机“看到”的只是一个数字矩阵。该矩阵中的任何给定数字都有相当大的噪声分量,因此它本身给我们提供的信息很少,但是这个数字矩阵就是计算机“看到”的全部数据。然后,我们的任务就是将这个有噪声的数字矩阵变成感知“侧面镜子”。图2给出了一些关于计算机视觉为何如此艰难的更多见解。


1 什么是OpenCV?  第1张
图1


1 什么是OpenCV?  第2张
图2

事实上,正如我们迄今为止所提出的那样,这个问题比严峻的还要糟糕:它在形式上是不可能解决的。给定3D世界的二维(2D)视图,没有独特的方式来重建3D信号。从形式上来说,这样的病态问题没有独特的或确定的解决方案。即使数据是完美的,相同的2D图像也可以表示3D场景的无限组合。但是,如前所述,数据受到噪声和失真的影响。这源于世界的变化(天气,照明,反射,运动),镜头和机械设置和传感器的不完善,传感器或其他电子设备中的电子噪声以及压缩后的压缩伪影图像捕捉。鉴于这些艰巨的挑战,我们如何能够取得进展?

计算机视觉基于相机数据的动作或决定是在特定目的或任务的背景下执行的。计算机视觉背景越受约束,我们越能依靠这些约束来简化问题,最终解决方案的可靠性就越高。 OpenCV旨在提供解决计算机视觉问题所需的基本工具。在某些情况下,OpenCV的高级功能足以解决计算机视觉中更复杂的问题。即使情况并非如此,OpenCV的基本组件已经足够完整,可以为您创建自己的完整解决方案,几乎适用于任何计算机视觉问题。

OpenCV的起源

OpenCV从英特尔研究计划发展而来,以推动CPU密集型应用程序的发展。 为此,英特尔推出了许多项目,包括实时光线追踪和3D显示墙。当时在英特尔工作的加里布拉德斯基正在访问大学,并注意到一些顶尖的大学组织,例如麻省理工学院媒体实验室,拥有完善的内部开放计算机视觉基础设施 - 代码是 从学生转到学生,这给每个新生在开发他或她自己的视觉应用程序方面有了宝贵的开端。 一个新的学生可以从以前开始构建,而不是从头开始重新设计基本功能。

因此,OpenCV被设想为使计算机视觉基础库普遍可用的一种方式。开始OpenCV有几个目标:

?通过为基础视觉库提供不仅开放而且优化的代码,从而推进视觉研究。

?通过提供开发人员可以构建的通用基础架构来传播视觉知识,以便代码更容易阅读和传输。

?通过免费提供可移植,性能优化的代码,提供基于视觉的商业应用程序,并提供无需商业应用程序即可自行开放或免费使用的许可证。

这些目标构成了OpenCV的“为什么”。启用计算机视觉应用程序将增加对快速处理器的需求。升级到更快的处理器将为英特尔带来更多的收入,而不是销售一些额外的软件。也许这就是为什么这个开放和免费代码是由硬件厂商而不是软件公司出现的原因。现在已经有大约1100万次OpenCV下载量,而且这个数字每个月平均下载160,000次。随着多核处理器的出现和计算机视觉的许多新应用,OpenCV的价值开始上升。同样,机器人领域的快速发展也推动了大量使用和发展。在成为开源库之后,OpenCV花了好几年时间的开发,现在得到了OpenCV基金会的支持。今天,OpenCV正在由基金会以及一些公共和私人机构积极开发。

The End