1、软件开发中的分治思想
分治思想强调将一个复杂问题分解为若干个规模较小、相对简单且相互独立的子问题。
软件开发中,将把相关功能集合起来封装成一个库。
而对于库的内部,又进一步的将相关的类、函数、变量等标识符进行分组封装成一个命名空间
2、opencv的命名空间大致结构
以下为官方文档中给出的namespace分类
(1)cv
是 OpenCV 的顶级命名空间,几乎所有 OpenCV 的类、函数和变量都在这个命名空间下。
(2)cvflann
在 OpenCV 中主要用于高效的近似最近邻搜索(ANN)和聚类算法,它基于 FLANN(Fast Library for Approximate Nearest Neighbors)库。cvflann
与 features2d
模块紧密协作。在特征匹配过程中,features2d
模块提取图像的特征描述符,这些描述符通常是高维向量。cvflann
则负责在这些高维特征向量空间中进行高效的最近邻搜索,以找到匹配的特征点对,从而实现图像的匹配、识别等任务。
(3)cvv
在 OpenCV 中主要用于内部使用和测试相关的功能。普通开发者一般无需直接与 cvv
命名空间交互,除非参与 OpenCV 库本身的开发和贡献。
(4) NcvCTprep
同样是内部开发和检查用途
(5)PlaidML
一个开源的深度学习计算加速库,它允许在各种硬件(包括 CPU、GPU 甚至一些不太常见的硬件)上运行深度学习模型,提供了一种跨平台的计算加速方案。这使得开发者在使用 OpenCV 进行深度学习相关任务(如目标检测、图像分类等基于深度学习模型的应用)时,可以借助 PlaidML 获得更好的性能,特别是在硬件资源有限或者硬件并非传统高性能 GPU 的情况下。
(6)simd512
相关内容主要与利用特定硬件指令集进行单指令多数据(SIMD)并行计算有关,其目的是显著提升计算密集型任务的执行效率
(7)std
C++ 标准库的命名空间,OpenCV 作为一个 C++ 库,在很多方面会与std命名空间交互