OpenCV简介、OpenCV的发展历程
近年来,人工智能是伴随着科技发展出现的一个重要词汇,全球多个国家提出了发展人工智能的规划方案。我国也在大力发展人工智能,众多高校也纷纷成立了关于人工智能的学院与专业。而在人工智能领域,数字图像处理与计算机视觉占据着重要的地位,人脸识别、刷脸支付、无人驾驶等词汇都是数字图像处理与计算机视觉领域的重要成果。
图像处理和计算机视觉技术与我们日常生活的关系越来越密切,越来越多的人已投身到相关技术的学习与研究中,而在学习与应用过程中一定会接触到OpenCV。
那么OpenCV是什么东西呢?接下来就向大家介绍介绍。
OpenCV是我们在研究和应用图像处理和计算机视觉技术的重要工具。(关于什么叫图像处理技术?什么叫计算机视觉技术?图像处理技术和计算机视觉技术有什么联系?大家可以参看下面这篇文章:
https://www.hhai.cc/thread-6-1-1.html)
无论是图像处理还是计算机视觉,都需要在计算机中处理数据,因此研究人员不得不面对一个 非常棘手的问题——将自己的研究成果通过代码输入计算机,进行仿真验证。而在这个过程中会重复编写基本的程序,这相当于为了制造一辆汽车,需要重新发明车轮子。
为了给所有研究人员提供“车轮”,英特尔(Intel)公司于1999年提出了开源计算机视觉库(Open Source Computer Vision Library ,OpenCV)的概念,通过在计算机视觉库中包含图像处理与计算机视觉的通用算法,避免重复无用的工作。就这样,OpenCV 应运而生,它是一个基于BSD开源发行的跨平台计算机视觉库。
1999年英特尔(Intel)公司提出OpenCV概念时,同时对这个库提出以下3个目标:
1.为基本的视觉应用提供开放且优化的源代码,以促进视觉研究的发展;
2.通过提供一个通用的构架来传播视觉知识,开发者可以在这个构架上继续开展工作;
3.不要求商业产品继续开源代码。
正是因为这三大目标,才使得OpenCV能够有效地避免“闭门造车”。同时,开放的源代码具有很好的可读性,并且可以根据需求改写,以符合研究人员的实际需求。另外,由于不要求商业产品开放源代码,因此OpenCV受到了企业的欢迎,更多的企业乐于将自己的研究成果上传到OpenCV库中,使得可移植的、性能优化的代码可自由获取。因此,OpenCV一经推出,便受到了众多研究者的欢迎。
OpenCV实现了图像处理和计算机视觉方面的很多通用算法,因此在当前很多前沿领域有较多应用,如人机交互、机器视觉、运动检测与跟踪及图像识别领域等。
OpenCV 由一系列C 语言函数和C++类构成,除支持使用C/C++语言进行开 发之外,它还支持 C# 、Ruby 等编程语言,并提供了 Python 、 MATLAB 、Java 等应用程序编程接口。它可以在 Linux 、Windows 、 macOS 、Android 和 iOS 等系统上运行。
OpenCV实现了多种实时且高效的算法、随着不断研发,C/C++接口函数库应用在大规模多核开发中,大大提升了软件算法的可应用性。OpenCV应用OpenCV接口开发技术,可以充分利用计算硬件底层平台进行硬件加速。目前OpenCV正在不断丰富适用于并行运算,即在GPU上运行的库函数,这更加提升了OpenCV的实时性。
OpenCV 的出现极大地方便 了计算机视觉研究人员的算法验证,得到了众多研究者的喜爱。经过 20 多年的发展,它已经成为计算机视觉领域最重要的研究工具之 一。
OpenCV的发展历程如下:
(关于下面提到的版本号alpha、beta代表的意思,大家可参考文章https://www.hhai.cc/thread-5-1-1.html
2000年6月,第一个开源版本OpenCV alpha 3发布。
2000年12月,针对Linux平台的OpenCV beta1发布。
2006年10月,OpenCV1.0正式发布,该版本可支持macOS平台,其Windows安装包包含了支持Python的模块,由于是基于C语言接口,容易出现内存泄漏等问题。
2008年10月,OpenCV1.1Pre1发布,Windows包可支持VS2005、Python2.6,并且支持OpenCV可独立编译Cmake。
2009年9月,OpenCV beta2.0发布,针对OpenCV1.0基于C语言接口容易出现内存泄漏的问题,引进了C++接口,自动管理内存释放,开源结构被重新组织规划,优化了许多函数及外部头文件。此次更新使得OpenCV变得更容易使用、也更加安全。
2010年4月,OpenCV2.1发布,支持64位系统,引入新的异常处理方法代替C风格处理方法,优化了新的测试函数。
2010年10月,OpenCV2.2发布,重新组织了库文件架构,将原先的cxcore、cv、cvaux、highgui和ml划分为15个新的库文件。
2011年6月,OpenCV2.3发布,修正了许多bug,提供更多的C++接口文件支持,重新编译生成新的LIBS。并约定每隔6个月发布一个新的OpenCV版本。
2012年3-11月,发布OpenCV2.4x(1、2、3),优化了多个函数接口,提供更多系统的支持,支持GPU加速,修复多个bug。
2013年3-12月,发布OpenCV2.4x(4、5、6、7、8),更多系统支持(Java及Android接口),引进基于OpenCL的硬件加速模块。
2014年4-11月,发布OpenCV2.4x(9、10、11),优化了OpenCV硬件加速模块及CUDA,引入了VTK 3D模块。
2015年4月,发布OpenCV 3.0 Candidate版本(候选版本),引入了新的硬件加速层模块OpenCV HAL模块,引入独立的mpeg解码器,库文件从多个合并为一个。实际上,OpenCV 3.0 Alpha版本在2014年8月就发布了,OpenCV 3.0的发布意味着OpenCV的发展进入了一个新的篇章。
2018年11月、2019年4月和2019年11月OpenCV4.0.0、OpenCV4.1.0、OpenCV4.1.2这三个版本相继发布。这三个版本更新了众多与机器学习相关的功能,标志着OpenCV与机器学习的联系更加紧密。
(关于上面提到的版本号alpha、beta代表的意思,大家可参考文章 https://www.hhai.cc/thread-5-1-1.html)
昊虹君写这篇文章时,OpenCV处于OpenCV4.X时代,OpenCV4的更新方向是去除一些过时的C语言的API,增加更多图像处理与计算机视觉算法模型。更重要的是,OpenCV逐步集成了深度学习模型,便于使用者通过深度学习解决计算机视觉问题。因此,在人工智能的潮流下,研究计算机视觉领域的研究人员可以好好学习研究下OpenCV4的使用。关于OpenCV4.X较之前的OpenCV3.0有什么变化,可参考文章 https://www.hhai.cc/thread-1-1-1.html