OpenCV是什么?关于OpenCV的详细介绍

创闻科学2020-11-16 14:59:19

开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库。 最初由英特尔开发,后来由柳树车库(Willow Garage)支持,后来由伊塞兹(Itseez)支持(后来被英特尔收购)。该库是跨平台的,根据开源BSD许可证免费使用。

OpenCV支持深度学习框架TensorFlow、Torch/PyTorch和Caffe。

历史

OpenCV项目于1999年正式启动,最初是英特尔的一项研究计划,旨在推进中央处理器密集型应用,是包括实时光线跟踪和3D显示墙在内的一系列项目的一部分。该项目的主要贡献者包括英特尔俄罗斯公司的许多优化专家,以及英特尔的性能库团队。在OpenCV的早期,项目的目标被描述为:

  • 通过为基本视觉基础设施提供开放且优化的代码来推进视觉研究。不再重新发明轮子。
  • 通过提供开发人员可以构建的公共基础设施来传播视觉知识,以便代码更容易阅读和转移。
  • 通过免费提供可移植的、性能优化的代码来推进基于视觉的商业应用程序——许可证不要求代码本身是开放的或自由的。

OpenCV的第一个alpha版本在2000年的IEEE计算机视觉和模式识别会议上向公众发布,2001年至2005年间发布了五个beta版本。第一个1.0版本于2006年发布。1.1版“预览版”于2008年10月发布。

OpenCV的第二次主要发布是在2009年10月。OpenCV 2包括对C++接口的主要更改,旨在更容易、更类型安全的模式、新功能以及现有功能在性能方面的更好实现(尤其是在多核系统上)。现在每六个月发布一次 官方版本,开发工作现在由商业公司支持的独立俄罗斯团队完成。

2012年8月,对OpenCV的支持被一个非营利基金会OpenCV.org接管, 该基金会拥有一个开发者和用户网站。

2016年5月,英特尔签署了一项协议, 收购OpenCV的主要开发商伊塞兹。

应用

运行OpenCV插件示例的openFrameworks

OpenCV的应用领域包括:

  • 2D和3D功能工具包
  • 运动估计
  • 面部识别系统
  • 手势识别
  • 人机交互
  • 移动机器人
  • 动作理解
  • 物体识别
  • 分割和识别
  • 实体影像立体视觉:来自两个摄像机的深度感知
  • 运动中的结构(SFM)
  • 运动跟踪
  • 增强现实

为了支持上述一些领域,OpenCV包括一个统计机器学习库,其中包含:

  • 提升(Boosting)
  • 决策树学习
  • 梯度提升树
  • 期望最大化算法
  • k最近邻算法
  • 朴素贝叶斯分类器
  • 人工神经网络
  • 随机森林
  • 支持向量机(SVM)
  • 深层神经网络(DNN)

程序设计语言

OpenCV是用C++编写的,它的主要接口是用C++编写的,但是它仍然保留了一个很广泛但不太全面的旧C接口。Python、Java和MATLAB/OCTAVE都有OpenCV 的API。这些接口的应用编程接口(API)可以在在线文档中找到。 现在OpenCV还提供诸如C#、Perl、 Ch 、 Haskell 和Ruby的接口,以鼓励更广泛的用户进行使用。

从3.4版开始,OpenCV.js是一个针对网络平台的OpenCV函数的选定子集的JavaScript对应API。

OpenCV中的所有新开发和算法现在都是在C++接口中开发的。

硬件加速

如果库在系统上找到英特尔的集成性能原语,它将使用这些专有的优化例程来加速自身。

自2010年9月以来,一个基于CUDA的图形处理器接口一直在支持中。

基于OpenCL的图形处理器接口自2012年10月以来一直在开发中,2.4.13.3版本的文档可在docs.opencv.org 上找到。

操作系统支持

OpenCV运行在以下桌面操作系统上:Windows、Linux、macOS、FreeBSD、NetBSD、OpenBSD。OpenCV运行在以下移动操作系统上:安卓、iOS、梅莫、黑莓10。 用户可以从SourceForge获得官方发布版本,也可以从GitHub获得最新的源代码。 OpenCV使用CMake。