计算机视觉软件库OpenCV的开发基础介绍

当下人工智能的发展是前所未有的迅猛 , 而计算机视觉(Computer Vision)无疑是人工智能一个非常重要的分支 , 计算机视觉的发展也成为了很多科研人员和业界开发人员聚焦的热点 。 我们常说的无人驾驶、智能安防、人脸识别、文字识别、以图搜图、VR/AR、3D重构等等都是以计算机视觉做为技术基础的应用实践 。
计算机视觉软件库OpenCV的开发基础介绍文章插图
在计算机视觉项目的开发中 , OpenCV作为最大众的开源库 , 拥有了丰富的常用图像处理函数库 , 采用C/C++语言编写 , 可以运行在Linux/Windows/Mac等操作系统上 , 能够快速的实现一些图像处理和识别的任务 。 此外 , OpenCV还提供了java、python、cuda等的使用接口、机器学习的基础算法调用 , 从而使得图像处理和图像分析变得更加易于上手 , 让开发人员更多的精力花在算法的设计上 。
本文主要介绍OpenCV开发的一些基础知识以及入门上手的方法 。
1、OpenCV的起源背景OpenCV诞生于Intel研究中心 , 其目的是为了促进CPU密集型应用 。 为了达到这一目的 , Intel启动了多个项目 , 包括实时光线追踪和三维显示墙 。 一个在Intel工作的OpenCV作者在访问一些大学时 , 注意到许多顶尖大学中的研究组(如MIT媒体实验室)拥有很好的内部使用的开放计算机视觉库(在学生们间互相传播的代码) , 这会帮助一个新生从一个很高的起点开始ta的计算机视觉研究 。 这样一个新生可以在以前的基础上继续开始研究 , 而不用去从底层编写基本函数 。
因此 , OpenCV的目的是开发一个普遍可用的计算机视觉库 。 在Intel的性能库团队的帮助下 , OpenCV实现了一些核心代码以及算法 , 并发给Intel俄罗斯的库团队 。 这就是OpenCV的诞生之地:在与软件性能库团队的合作下 , 它开始于Intel的研究中心 , 并在俄罗斯得到实现和优化(这再一次验证了俄罗斯程序员的卓越之处!) 。
俄罗斯团队的主要负责人是俄罗斯人Vadim Pisarevsky , 他负责管理项目、写代码并优化OpenCV的大部分代码 , 在OpenCV中很大一部分功劳都属于他 。 跟他一起 , Victor Eruhimov帮助开发了早期的架构 , Valery Kuriakin管理俄罗斯实验室并提供了很大的支持 。 在开始时 , OpenCV就定下了以下三大目标:
(1)为基本的视觉应用提供开放且优化的源代码 , 以促进视觉研究的发展 。 能有效地避免“闭门造车” 。
(2)通过提供一个通用的架构来传播视觉知识 , 开发者可以在这个架构上继续开展工作 , 所以代码应该是非常易读的且可改写 。
(3)本库采用的协议不要求商业产品继续开放代码 , 这使得可移植的、性能被优化的代码可以自由获取 , 可以促进基于视觉的商业应用的发展 。
这些目标说明了OpenCV的缘起 。 计算机视觉应用的发展会增加对快速处理器的需求 。 与单独销售软件相比 , 促进处理器的升级会为Intel带来更多收入 。 这也许是为什么这个开放且免费的库出现在一家硬件生产企业中 , 而不是在一家软件公司中 。 从某种程度上说 , 在一家硬件公司里 , 在软件方面会有更多创新的空间 。 就像华为这样的网络通讯设备公司 , 与硬件相配套的软件也是非常的强大!
2、OpenCV简介OpenCV的全称是:Open Source Computer Vision Library 。 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库 , 可以运行在Linux、Windows、Android和Mac OS操作系统上 。 它是轻量级的 , 而且是高效的 , 由一系列C函数和少量C++类构成 , 同时提供了Python、Ruby、MATLAB等语言的接口 , 实现了图像处理和计算机视觉方面的很多通用算法 。
OpenCV用C++语言编写 , 它的主要接口也是C++语言 , 但是依然保留了大量的C语言接口 。 该库也有大量的Python、Java and MATLAB/OCTAVE的接口 。 这些语言的API接口函数可以通过在线文档获得 。 如今也提供对于C#、Ruby等的支持 。
计算机视觉软件库OpenCV的开发基础介绍文章插图
OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库 。 无论你是做科学研究 , 还是商业应用 , OpenCV都可以作为你理想的工具库 , 因为对于这两者 , 它完全是免费的 。
同时 , 由于计算机视觉与机器学习密不可分 , 该库也包含了比较常用的一些机器学习算法 , 比如图像识别、机器视觉在安防领域有广泛的应用 。 但很少有人知道 , 在航拍图片、街道图片(例如google street view)中 , 要严重依赖于机器视觉的摄像头标定、图像融合等技术 。