OpenCV包含的模块以及组成结构
OpenCV 是由很多模块组成的,这些模块可以分成很多层:
下图显示了 OpenCV 的这种组织关系。
图1:OpenCV 层级结构及其所支持的操作系统
下表给出了 OpenCV 包含的具体模块,虽然这些模块会随着时间推移而不断的发展,但模块始终是组成这个库的基本单位,每个函数都是一个模块的一部分。
- 最底层是基于硬件加速层(HAL)的各种硬件优化。
- 再上一层是 opencv_contrib 模块所包含的 OpenCV 由其他开发人员所贡献的代码,其包含大多数高层级的函数功能。这就是OpenCV的核心。
- 接下来是语言绑定和示例应用程序。
- 处于最上层的是 OpenCV 和操作系统的交互。
下图显示了 OpenCV 的这种组织关系。
图1:OpenCV 层级结构及其所支持的操作系统
下表给出了 OpenCV 包含的具体模块,虽然这些模块会随着时间推移而不断的发展,但模块始终是组成这个库的基本单位,每个函数都是一个模块的一部分。
模块 | 说明 |
---|---|
Core | 该模块包含 OpenCV 库的基础结构以及基本操作。 |
Improc | 图像处理模块包含基本的图像转换,包括滤波以及类似的卷积操作。 |
Highgui |
在 OpenCV 3.0中,分割为 imcodecs、videoio 以及 highgui 三部分。 这个模块包含可以用来显示图像或者简单的输入的用户交互函数。这可以看作是一个非常轻量级的 Windows UI 工具包。 |
Video | 该模块包含读取和写视频流的函数。 |
Calib3d | 这个模块包括校准单个、双目以及多个相机的算法实现。 |
Feature2d | 这个模块包含用于检测、描述以及匹配特征点的算法。 |
Objdectect | 这个模块包含检测特定目标,比如人脸或者行人的算法。也可以训练检测器并用来检测其他物体。 |
Ml | 机器学习模块本身是一个非常完备的模块,包含大量的机器学习算法实现并且这些算法都能和 OpenCV 的数据类型自然交互。 |
Flann | Flann 的意思是“快速最邻近库”。这个库包含一些你也许不会直接使用的方法,但是其他模块中的函数会调用它在数据集中进行最邻近搜索。 |
GPU |
在 OpenCV 中被分割为多个 cuda* 模块。 GPU 模块主要是函数在 CUDA GPU 上的优化实现,此外,还有一些仅用于 GPU 的功 能。其中一些函数能够返回很好的结果,但是需要足够好的计算资源,如果硬件没有GPU,则不会有什么提升。 |
Photo | 这是一个相当新的模块,包含计算摄影学的一些函数工具。 |
Stitching | 本模块是一个精巧的图像拼接流程实现。这是库中的新功能,但是,就像 Photo 模块一样,这个领域未来预计有很大的增长。 |
Nonfree |
在 OpenCV 3.0 中,被移到 opencv_contrib/xfeatures2d。 OpenCV 包含一些受到专利保护的或者受到使用限制的(比如 SIFT 算法)算法。这些算法被隔离到它们自己的模块中,以表明你需要做一些特殊的工作,才可以在商业产品中使用它们。 |
Contrib |
在 OpenCV 3.0 中,融合进了 opencv_contrib。 这个模块包含一些新的、还没有被集成进 OpenCV 库的东西。 |
Legacy |
在 OpenCV 3.0 中,被取消。 这个模块包含一些老的尚未被完全取消的东西。 |
ocl |
在OpenCV 3.0 中,被取消,取而代之的是 T-API。 这是一个较新的模块,可以认为它和 GPU 模块相似,它实现了开放并行编程的 Khronos OpenCL 标准。虽然现在模块的特性比 GPU 模块少很多,但 ocl 模块的目标是提供可以运行在任何 GPU 或者是其他可以搭载 Khronos 的并行设备。这与 GPU 模 块形成了鲜明的对比,后者使用 Nividia CUDA 工具包进行开发,因此只能在 Nividia GPU 设备上工作。 |
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频
优秀文章
- Go语言结构体标签(Struct Tag)
- C语言中的二进制数、八进制数和十六进制数
- Windows下C语言程序的内存布局(内存模型)
- Android ContentProvider(内容提供者)
- 汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作
- 高级语言调用汇编语言的接口规范
- Java Statement.addBath()方法:添加批处理语句
- Python with as用法详解
- Struts2 ActionContext.getContext().get(Object key)法:获取Map类型的request
- JS propertyIsEnumerable()方法:检测一个属性是否可枚举