《计算机视觉算法:基于OpenCV的计算机应用开发》 —2.2 OpenCV介绍

举报
华章计算机 发表于 2020/02/15 12:59:22 2020/02/15
【摘要】 本节书摘来自华章计算机《计算机视觉算法:基于OpenCV的计算机应用开发》 一书中第2章,第2.2节,作者是[伊朗] 阿明·艾哈迈迪·塔兹赫孔迪(Amin Ahmadi Tazehkandi) ,陈靖 杨欣 译。

2.2 OpenCV介绍

OpenCV是一系列的库、工具和模块,包含了用于构建计算机视觉应用的各种类和函数。OpenCV库被全球各地的计算机视觉开发者下载了数以百万次,它运行速度快,并针对实际项目(包括商业项目)进行了优化。当编写本书时,最新版本的OpenCV是3.4.1,本书中所有范例都使用该版本。OpenCV支持C/C++、Python和Java编程语言,可在桌面和移动操作系统中搭建计算机视觉应用,支持的操作系统有Windows、Linux、macOS、Android和iOS。

值得一提的是,OpenCV库和OpenCV框架都指代OpenCV,并且在计算机视觉社区,这两个术语在大多数情况下是通用的。基于同样的原因,本书中这两个术语也通用。但是严格来说,框架这个术语通常是指用于达成同一目标的一系列相关库和工具,例如OpenCV。

OpenCV由下面两种模块组成:

  • 主体模块:在已发布的OpenCV版本中默认包括的模块,包含了OpenCV数据库的核心功能,这些模块可用于图像处理工作、滤镜、变换和很多其他功能,本节将会讲到。

  • 附加模块:这些模块包括OpenCV默认模块以外的其他所有功能,主要是附加的计算机视觉相关功能。比如,附加模块包含可用于文字识别和非自由特征检测的库。请注意,我们的重点将放在主体模块和其所包含的功能上,但凡有所帮助,我们也将提供附加模块中的一些可选项,供读者自行研究。

OpenCV的主体模块

前面提到过,OpenCV的主体模块包含了所有的核心和默认功能。此处给出这些模块的列表:

  • core:包含了OpenCV的所有核心功能。例如,所有的基本数据结构,包括Mat类(我们后面将详细学习)和矩阵运算等嵌入到各模块中的功能。

  • imgproc:该模块包含了所有图像处理功能,例如滤镜、变换和直方图。

  • imgcodecs:该模块包含了读写图像的函数。

  • videoio:类似于imgcodecs模块,但是从名字可以看出,它用于读写视频。

  • highgui:在本书中将经常使用这个模块,它包含了用于结果显示和GUI(图形用户界面)创建的所有一般功能。但请注意,即使highgui模块可以满足本书的教学目的,并能在我们学习计算机视觉算法过程中起到结果可视化的作用,也不意味它能适合大规模的应用。更多适用于创建计算机视觉应用GUI的工具请参考本章结尾处的补充阅读部分。

  • video:包含视频分析功能,例如运动检测和追踪,卡尔曼(Kalman)滤波器和CAM 偏移算法(用于物体追踪)。

  • calib3d:该模块包括校准和3D重建功能。此模块一个众所周知的例子就是预测两个图像之间的变换。

  • features2d:该模块包括支持关键点检测(supported keypoint-dectection)和描述符提取(descriptor-extraction)算法。我们将在接下来的章节中了解到,此模块包含了许多广泛应用于目标检测和分类的算法。

  • objdetect:从名字可以看出,该模块被用于目标检测。我们将在本书的最后几章学习此模块包含的功能。

  • dnn:类似于objdetect模块,该模块与其他模块一起用于目标检测和分类。在OpenCV主要模块的列表中,dnn模块相对较新,它包含了所有与深度学习相关的功能。

  • ml:这个机器学习模块包含了用于处理分类和回归的类和函数。简单来说,此模块包含了所有机器学习相关的功能。

  • flann:这是OpenCV的近似最近邻算法高速库(Fast Library for Approximate Nearest Neighbors,FLANN)接口。FLANN包含了大量优化过的算法,用于处理巨大数据集高维特征的最近邻查找。这里提到的算法通常和其他模块的算法一起使用,例如features2d模块。

  • photo:这是有趣的与摄影相关的计算机视觉模块,它包含了一些类和函数,用于处理降噪、HDR成像以及用相邻区域修复相片等任务。

  • stitching:该模块包含了用于图像拼接的类和函数。需要注意的是,拼接本身是一个非常复杂的任务,需要旋转估计函数和图像扭曲函数,它们也是这个有趣的OpenCV模块中的组成部分。

  • shape:该模块用来处理形状变换、匹配以及距离相关的主题。

  • superres:这个超分辨率模块包括了分辨率增强方面的算法。

  • videostab:该模块包含了用于视频画面稳定的算法。

  • viz:也被称为3D可视化模块,它包含了用于在3D可视化窗口显示小部件的类和函数。该模块不会在本书讨论的主题中出现,我们只是提及它。

除了我们刚刚介绍的模块,OpenCV同样包含了很多基于CUDA(Nvidia构建的API)的主体模块。这些模块从它们以cuda开头的名字就可以轻易识别。由于这些模块的可用性完全取决于特定类型的硬件,并且它们的所有功能基本上都可用一种或几种其他模块替换,所以我们暂时跳过它们。值得注意的是,使用OpenCV cuda模块可以显著地提高应用程序的性能,前提是你需要的算法是用它们实现的,并且你的硬件达到了最低要求。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。