Opencv中文网

OpenCV的基本架构

在最新的OpenCV – 4.11.0版本中,进入到build\include\opencv2文件夹,我们会看到如下一些文件夹和文件。下面将对这些文件夹进行说明。

include文件夹分析

文件夹/文件功能说明典型头文件示例
core/基础数据结构(矩阵 Mat、向量等)和基本操作(算术、IO、并行化)。core.hppmat.hpp
imgproc/图像处理(滤波、几何变换、色彩空间转换、边缘检测等)。imgproc.hppfilter.hpp
imgcodecs/图像读写(支持JPEG/PNG/TIFF等格式)。imgcodecs.hpp
videoio/视频捕获与保存(摄像头、视频文件)。videoio.hppvideoio_c.h
highgui/图形界面(显示图像、创建窗口、鼠标事件)。highgui.hpp
dnn/深度学习模块(加载TensorFlow/PyTorch/ONNX模型,推理)。dnn.hppdnn/all_layers.hpp
calib3d/相机标定、立体视觉、3D重建。calib3d.hppstereo.hpp
features2d/特征检测与匹配(SIFT、ORB、BFMatcher等)。features2d.hppxfeatures2d.hpp
objdetect/目标检测(人脸检测、二维码识别、HOG+SVM等)。objdetect.hppqr_code.hpp
ml/机器学习(SVM、决策树、KNN等传统算法)。ml.hpp
gapi/图像处理流水线框架(高性能异构计算)。需单独编译 opencv_gapi 模块。
stitching/图像拼接(全景图生成)。依赖 features2d
photo/计算摄影(去噪、HDR、图像修复)。photo.hpp
video/视频分析(光流、背景减除、目标跟踪)。video/tracking.hpp
ximgproc/扩展图像处理(边缘感知滤波、结构化森林)。需额外安装 opencv_contrib
xfeatures2d/额外特征检测(SURF、SIFT等专利算法)。需启用 OPENCV_ENABLE_NONFREE
flann/ 快速近似最近邻搜索库(Fast Library for Approximate Nearest Neighbors, FLANN) 的实现部分。

除了上述文件夹,还有一个重要的文件叫opencv_modules.hpp,该文件记录了哪些模块被编译进当前版本。用记事本打开,其内容如下:

/*
 *      ** File generated automatically, do not modify **
 *
 * This file defines the list of modules available in current build configuration
 *
 *
*/

// This definition means that OpenCV is built with enabled non-free code.
// For example, patented algorithms for non-profit/non-commercial use only.
/* #undef OPENCV_ENABLE_NONFREE */

#define HAVE_OPENCV_CALIB3D
#define HAVE_OPENCV_CORE
#define HAVE_OPENCV_DNN
#define HAVE_OPENCV_FEATURES2D
#define HAVE_OPENCV_FLANN
#define HAVE_OPENCV_GAPI
#define HAVE_OPENCV_HIGHGUI
#define HAVE_OPENCV_IMGCODECS
#define HAVE_OPENCV_IMGPROC
#define HAVE_OPENCV_ML
#define HAVE_OPENCV_OBJDETECT
#define HAVE_OPENCV_PHOTO
#define HAVE_OPENCV_STITCHING
#define HAVE_OPENCV_VIDEO
#define HAVE_OPENCV_VIDEOIO
#define HAVE_OPENCV_WORLD

另外还有一些配置文件与宏定义也需要了解一下。

  • opencv.hpp 主头文件,包含所有核心模块(方便一次性引用)。
  • cvdef.h 基础宏定义(版本号、编译器兼容性、硬件指令集开关)。
  • config.h 编译时生成的配置(如是否启用CUDA、OpenCL等)。
  • version.hpp 版本信息(CV_VERSION_MAJORCV_VERSION_MINOR)。

C++包含头文件使用示例

#include <opencv2/opencv.hpp>                  // 包含所有核心模块
#include <opencv2/dnn.hpp>                     // 单独引入深度学习模块
#include <opencv2/xfeatures2d/nonfree.hpp>     // 使用SIFT/SURF(需非免费许可)

——重庆教主 2025年5月6日

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1