OpenCV是一个基于Apache2.0许可(开源)发行的
跨平台计算机视觉和机器学习软件库,可以运行在
Linux、
Windows、
Android和
Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量
C++ 类构成,同时提供了Python、
Ruby、
MATLAB等语言的接口,实现了
图像处理和计算机视觉方面的很多通用算法。
历史发展
OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。
OpenCV 为Intel® Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的 IPP 库,OpenCV 将在
运行时自动加载这些库。
(注:OpenCV 2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口)
最新版本是4.5。
1999年1月,CVL
项目启动。主要目标是
人机界面,能被UI调用的
实时计算机视觉库,为
Intel处理器做了特定优化。
2000年6月,第一个开源版本OpenCV alpha 3发布。
2000年12月,针对linux平台的OpenCV beta 1发布。
2006年,支持Mac OS的OpenCV 1.0发布。
2009年9月,OpenCV 1.2(beta2.0)发布。
2009年10月1日,Version 2.0发布。
2010年12月6日,OpenCV 2.2发布。
2011年8月,OpenCV 2.3发布。
2012年4月2日,发布OpenCV 2.4。
2014年8月21日,发布OpenCv 3.0 alpha。
2014年11月11日,发布OpenCV 3.0 beta。
2015年6月4日,发布OpenCV 3.0。
2016年12月,发布OpenCV 3.2版(合并969个修补程序,关闭478个问题)
2017年8月3日,发布OpenCV 3.3版(最重要的更新是把
DNN模块从contrib里面提到主仓库)
2022年12月29日,发布OpenCV 4.7.0版,带来了全新的 ONNX 层,大大提高了 DNN 代码的卷积性能。
OpenCV 使用类
BSDlicense,所以对非商业应用和商业应用都是免费(FREE)的。(细节参考 license)
OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成
执行程序,所以很多人用它来做算法的移植,
OpenCV的代码经过适当改写可以正常的运行在DSP系统和
ARM嵌入式系统中,这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。
2022年12月8日,
龙芯中科宣布,近期,OpenCV
开源社区正式合入了对 LoongArch 架构支持的代码,基于龙架构自主
指令系统,优化后的 OpenCV 性能显著提升。
优势
为什么有OpenCV
计算机视觉市场巨大而且持续增长,且这方面没有标准
API,如今的计算机视觉软件大概有以下三种:
1、研究代码(慢,不稳定,独立并与其他库不兼容)
2、耗费很高的商业化工具(比如Halcon,
MATLAB+Simulink)
3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,
医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。
OpenCV致力于
真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的
IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的
处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。
应用领域
2、物体识别
5、动作识别
7、机器人
11、汽车安全驾驶
其他相关
作者列表可以在AUTHORS文件中找到。
此外,还有很多人给出了建议、补丁、BUG 报告等等,在文件THANKS中对此有一个不完全的列表。
想要了解OpenCV的新特征,请参考OpenCV Change Log。
如果在安装/运行/使用OpenCV中遇到问题
1、阅读FAQ中文。
3、加入到
yahoo group 上的 OpenCV 邮件列表中(如何加入请参考
FAQs),并发送你的问题到邮件列表中。(这个邮件列表可能会迁移到OpenCV's SourceForge site)
4、参考 OpenCV 的例子代码,阅读参考手册。
编程语言
OpenCV用
C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的
Python、
Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、
Ruby的支持。
所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。
系统支持
OpenCV可以在Windows,
Android,Maemo,
FreeBSD,OpenBSD,
iOS,
Linux 和
Mac OS等平台上运行。使用者可以在 SourceForge 获得官方版本,或者从
SVN 获得开发版本。OpenCV也是用CMake。
在Windows上编译OpenCV中与摄像输入有关部分时,需要
DirectShow版本发布
2010年12月06日,OpenCV 2.2.0
正式版发布。
2011年06月25日,OpenCV-2.3.0rc 发布了,新增加了一个stitching拼接模块,Android支持更加方便了,使用
Google test框架,其他变化主要是内部性能改进。
2013年07月03日,OpenCV 2.4.6发布。
首先,OpenCV 2.3的Android build终于变成了官方支持的NDK-Build的方式了。以前的方法相当让人头疼,使用的非Android官方的方法去写
JNI接口,tutorial跟着走一遍也不知道所以然。
其次,What’s new里面说道,新的Android支持是NVidia在开发。本来OpenCV就是支持
CUDA显卡加速的。
2013年12月31日,OpenCV 2.4.8发布。
2014年4月25日,OpenCV 2.4.9发布。
2014年8月21日,OpenCv 3.0 alpha版本发布。
2014年11月11日,OpenCv 3.0 beta版本发布。
2015年6月4日,OpenCV 3.0版本发布。
2015年7月30号,OpenCV2.4.12版本发布。
2015年12月21日,OpenCV3.1版本发布。
2016年12月23日,OpenCV3.2版本发布。
2017年8月3日,OpenCV3.3版本发布。
2018年7月4日,OpenCV3.4.2版本发布。
2018年11月18日,Opencv4.0.0版本发布。
2022年12月29日,OpenCV 4.7.0版本发布。