OpenCV (Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV旨在为计算机视觉应用提供通用基础架构,并加速机器感知在商业产品中的应用。作为BSD授权许可的产品,OpenCV让企业可以轻松地使用和修改代码。
这个库拥有超过2500种的优化算法,涵盖了经典的和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸、识别对象、区分视频中人的动作、跟踪相机移动、跟踪移动物体、提取物体的3D模型、从立体相机生成3D点云、将图像拼接在一起以产生整个场景的高分辨率图像、从图像数据库中找到相似的图像、从使用闪光灯拍摄的图像中去除红眼、跟踪眼球运动、识别景物并建立标记以将其与增强现实等叠加。OpenCV拥有超过47,000人的用户社区和超过1400万的估计下载量。该库被公司,研究团体和政府机构广泛使用。
除了谷歌、雅虎、微软、英特尔、IBM、索尼、本田、丰田等知名公司之外,还有很多初创公司,如Applied Minds,VideoSurf和Zeitera等,都广泛使用OpenCV。OpenCV的部署用途范围包括拼接街景图像,检测以色列监控视频中的入侵,监控中国的矿山设备,帮助机器人在Willow车库导航和拾取物体,检测欧洲的游泳池溺水事故,在西班牙和纽约展示交互艺术,检查土耳其跑道的碎片,检查世界各地工厂的产品标签,以及在日本进行快速人脸识别等。
OpenCV具有C++,Python,Java和MATLAB接口,支持Windows,Linux,Android和Mac OS。OpenCV主要倾向于实时视觉应用,并在可用时采用MMX和SSE指令。目前正在积极开发全功能的CUDA和OpenCL接口,有超过500个算法和大约10倍的函数来组成或支持这些算法。结合OpenCL,可以在多个计算平台下进行硬件的加速。OpenCV本身是用C ++编写的,并且有一个可与STL容器无缝协作的模板化接口。
下图为Open CV的logo:
[描述来源:OpenCV官网;URL:https://opencv.org/]
发展历史
OpenCV项目最早由英特尔公司于1999年启动,致力于CPU密集型的任务,是一个包括如光线追踪和3D显示的计划的一部分。早期OpenCV的主要目标是
- 为推进机器视觉的研究,提供一套开源且优化的基础库。
- 提供一个共同的基础库,使得开发人员的代码更容易阅读和转让,促进了知识的传播。
- 通过提供一个不需要开源或免费的软件许可,促进商业应用软件的开发。
- OpenCV现在也集成了对CUDA的支持.
OpenCV的第一个预览版本于2000年在IEEE Conference on Computer Vision and Pattern Recognition公开,并且后续提供了五个测试版本。1.0版本于2006年发布。
OpenCV的第二个主要版本是2009年10月的OpenCV 2.0。该版本的主要更新包括C++接口,更容易、更类型安全的模式,新的函数,以及对现有实现的优化(特别是多核心方面)。现在每6个月就会有一个官方版本,并由一个商业公司赞助的独立小组进行开发。
在2012年8月,OpenCV的支持由一个非盈利性组织(OpenCV.org)来提供,并保留了一个开发者网站和用户网站。
目前发布的最新版本为OpenCV 4.0
主要事件
年份 | 事件 | 相关论文/Reference |
2000 | 首次提出OpenCV,对OpenCV的基本内容、应用等方面进行了介绍 | Bradski, G., & Kaehler, A. (2000). OpenCV. Dr. Dobb’s journal of software tools, 3. |
2000 | OpenCV的第一个预览版本公开 | http://www.drdobbs.com/open-source/the-opencv-library/184404319 |
2012 | 与GPU和OpenCL等的结合推进了OpenCV在实时视觉的应用 | Pulli, K., Baksheev, A., Kornyakov, K., & Eruhimov, V. (2012). Realtime computer vision with OpenCV. Queue, 10(4), 40. |
发展分析
瓶颈
-OpenCV的文档不够完善,有时不能清楚地解释参数含义及影响,代码例子少,不便于理解。
-由于是开源社区开发和维护,出现bug时的修改不能得到快速且有力的保障。
未来发展方向
OpenCV致力于在未来解决如下领域的问题:
- 增强现实
- 人脸识别
- 手势识别
- 人机交互
- 动作识别
- 运动跟踪
- 物体识别
- 图像分区
- 机器人
Contributor: Yueqin Li