OpenCV 4.13.0 源码文件索引与导航
1. 使用范围与路径约定
本文是一份可独立使用的 OpenCV 4.13.0 源码导航,内容按源码树实际文件核验。
- 所有路径都相对于源码根目录
opencv-4.13.0/。
- “公开头”指安装后供使用者包含的头文件;“内部头”通常只参与 OpenCV 自身编译。
src/ 是实现主入口,test/ 是正确性与回归测试,perf/ 是性能基准。
- 同一 API 可能经过分派层、HAL、第三方库或硬件后端,不能只凭第一个同名函数判断最终执行位置。
- 本文不依赖同目录或上级目录中的其他说明文档。
建议按“公开声明 → 普通实现 → 分派/HAL → 测试 → perf → Demo”的顺序阅读。
2. 根目录导航
| 路径 |
作用 |
阅读重点 |
CMakeLists.txt |
全工程构建入口 |
版本、平台、全局选项、模块扫描、HAL 与第三方依赖 |
cmake/ |
CMake 基础设施 |
模块声明、CPU 分派、依赖探测、安装与包导出 |
modules/ |
OpenCV 主模块 |
每个模块一般含公开头、实现、测试、性能测试 |
include/opencv2/opencv.hpp |
常用聚合头 |
汇总主要模块头,适合应用,不适合定位具体声明 |
hal/ |
树内可选 HAL 实现 |
Carotene、FastCV、IPP、OpenVX、RVV、KleidiCV 等 |
3rdparty/ |
随源码构建的第三方组件 |
图像格式、并行库、模型格式等可选依赖 |
apps/ |
官方命令行工具 |
标注、级联训练、模型诊断、交互标定等完整应用 |
samples/ |
C++、Python、DNN、G-API 等示例 |
从 API 用法反查模块和源码的首选入口 |
platforms/ |
平台构建与交叉编译 |
Android、Apple、JavaScript、Linux 工具链与打包 |
data/ |
运行示例所需数据 |
Haar/LBP 分类器和算法数据 |
doc/ |
官方文档源文件 |
API 分组、教程和构建文档源 |
LICENSE |
项目许可证 |
二次分发前应核对 |
README.md |
项目入口说明 |
支持平台、构建和项目概况 |
3. 模块总览
| 模块 |
主要公开头 |
主要实现目录 |
测试/性能 |
| core |
modules/core/include/opencv2/core.hpp、modules/core/include/opencv2/core/ |
modules/core/src/ |
modules/core/test/、modules/core/perf/ |
| imgproc |
modules/imgproc/include/opencv2/imgproc.hpp |
modules/imgproc/src/ |
modules/imgproc/test/、modules/imgproc/perf/ |
| imgcodecs |
modules/imgcodecs/include/opencv2/imgcodecs.hpp |
modules/imgcodecs/src/ |
modules/imgcodecs/test/、modules/imgcodecs/perf/ |
| highgui |
modules/highgui/include/opencv2/highgui.hpp |
modules/highgui/src/ |
modules/highgui/test/ |
| features2d |
modules/features2d/include/opencv2/features2d.hpp |
modules/features2d/src/ |
modules/features2d/test/、modules/features2d/perf/ |
| calib3d |
modules/calib3d/include/opencv2/calib3d.hpp |
modules/calib3d/src/ |
modules/calib3d/test/、modules/calib3d/perf/ |
| video |
modules/video/include/opencv2/video.hpp、modules/video/include/opencv2/video/ |
modules/video/src/ |
modules/video/test/、modules/video/perf/ |
| videoio |
modules/videoio/include/opencv2/videoio.hpp |
modules/videoio/src/ |
modules/videoio/test/、modules/videoio/perf/ |
| dnn |
modules/dnn/include/opencv2/dnn.hpp |
modules/dnn/src/ |
modules/dnn/test/、modules/dnn/perf/ |
| gapi |
modules/gapi/include/opencv2/gapi.hpp |
modules/gapi/src/ |
modules/gapi/test/、modules/gapi/perf/ |
| stitching |
modules/stitching/include/opencv2/stitching.hpp |
modules/stitching/src/ |
modules/stitching/test/、modules/stitching/perf/ |
| objdetect |
modules/objdetect/include/opencv2/objdetect.hpp |
modules/objdetect/src/ |
modules/objdetect/test/、modules/objdetect/perf/ |
| photo |
modules/photo/include/opencv2/photo.hpp |
modules/photo/src/ |
modules/photo/test/、modules/photo/perf/ |
| ts |
modules/ts/include/opencv2/ts/ |
modules/ts/src/ |
测试与 perf 的公共支撑 |
| world |
modules/world/CMakeLists.txt |
聚合其他模块 |
生成单一 opencv_world 库 |
4. Core:数据结构、基础运算与运行时
4.1 公开 API 与内部实现
| 主题 |
声明入口 |
实现入口 |
Mat、引用计数、ROI |
modules/core/include/opencv2/core/mat.hpp |
modules/core/src/matrix.cpp、modules/core/src/matrix_wrap.cpp |
Mat 迭代器 |
modules/core/include/opencv2/core/mat.hpp |
modules/core/src/matrix_iterator.cpp |
| 矩阵分解 |
modules/core/include/opencv2/core.hpp |
modules/core/src/matrix_decomp.cpp |
| 基础类型 |
modules/core/include/opencv2/core/types.hpp |
多数为头内定义 |
| 错误码与基础宏 |
modules/core/include/opencv2/core/base.hpp |
modules/core/src/system.cpp |
| 算术运算 |
modules/core/include/opencv2/core.hpp |
modules/core/src/arithm.cpp、modules/core/src/arithm.dispatch.cpp |
| 矩阵乘法 |
modules/core/include/opencv2/core.hpp |
modules/core/src/matmul.dispatch.cpp |
| 统计与归约 |
modules/core/include/opencv2/core.hpp |
modules/core/src/stat_c.cpp、modules/core/src/stat.dispatch.cpp |
| DFT/DCT |
modules/core/include/opencv2/core.hpp |
modules/core/src/dxt.cpp |
| 线性代数/LAPACK 路径 |
modules/core/include/opencv2/core.hpp |
modules/core/src/lapack.cpp |
| CPU 与构建信息 |
modules/core/include/opencv2/core/utility.hpp |
modules/core/src/system.cpp |
| 并行循环 |
modules/core/include/opencv2/core/utility.hpp |
modules/core/src/parallel.cpp、modules/core/src/parallel/ |
| 文件存储 |
modules/core/include/opencv2/core/persistence.hpp |
modules/core/src/persistence.cpp、persistence_xml.cpp、persistence_yml.cpp、persistence_json.cpp |
| OpenCL/UMat |
modules/core/include/opencv2/core/ocl.hpp |
modules/core/src/ocl.cpp、modules/core/src/opencl/ |
| CUDA 基础类型 |
modules/core/include/opencv2/core/cuda.hpp |
modules/core/src/cuda_host_mem.cpp |
| 文件系统工具 |
modules/core/include/opencv2/core/utils/filesystem.hpp |
modules/core/src/utils/filesystem.cpp |
4.2 Core 的分派、测试与性能入口
| 目的 |
文件 |
| 查看标量实现与 HAL 选择 |
modules/core/src/arithm.cpp |
| 查看 CPU 分派包装 |
modules/core/src/arithm.dispatch.cpp |
| 查看 SIMD 实现 |
modules/core/src/arithm.simd.hpp |
| 查看 GEMM/乘法分派 |
modules/core/src/matmul.dispatch.cpp、modules/core/src/matmul.simd.hpp |
| 查看默认 HAL 回退 |
modules/core/src/hal_replacement.hpp |
| 查看运行时并行后端注册 |
modules/core/src/parallel/registry_parallel.impl.hpp |
| 算术正确性测试 |
modules/core/test/test_arithm.cpp |
| 通用运算测试 |
modules/core/test/test_operations.cpp |
| 矩阵性能 |
modules/core/perf/perf_mat.cpp |
| 算术性能 |
modules/core/perf/perf_arithm.cpp |
| 统计性能 |
modules/core/perf/perf_stat.cpp |
5. Imgproc:图像处理主干
公开声明集中在 modules/imgproc/include/opencv2/imgproc.hpp;较细的分割接口还可见
modules/imgproc/include/opencv2/imgproc/segmentation.hpp。
| 算法域 |
主要实现文件 |
典型测试或 perf |
| 通用滤波引擎 |
modules/imgproc/src/filter.dispatch.cpp、filterengine.hpp |
test/test_filter.cpp、perf/perf_filter2d.cpp |
| 平滑与高斯滤波 |
modules/imgproc/src/smooth.dispatch.cpp、smooth.simd.hpp |
test/test_filter.cpp |
| 双边滤波 |
modules/imgproc/src/bilateral_filter.dispatch.cpp、bilateral_filter.simd.hpp |
test/test_filter.cpp |
| 中值滤波 |
modules/imgproc/src/median_blur.dispatch.cpp |
test/test_filter.cpp |
| 形态学 |
modules/imgproc/src/morph.dispatch.cpp、morph.simd.hpp |
test/test_filter.cpp |
| 颜色转换总入口 |
modules/imgproc/src/color.cpp |
test/test_color.cpp、perf/perf_cvt_color.cpp |
| RGB/灰度转换 |
modules/imgproc/src/color_rgb.dispatch.cpp、color_rgb.simd.hpp |
test/test_color.cpp |
| HSV 转换 |
modules/imgproc/src/color_hsv.dispatch.cpp、color_hsv.simd.hpp |
test/test_color.cpp |
| YUV 转换 |
modules/imgproc/src/color_yuv.dispatch.cpp、color_yuv.simd.hpp |
test/test_color.cpp |
| 仿射/透视/重映射 |
modules/imgproc/src/imgwarp.cpp |
test/test_imgwarp.cpp、perf/perf_warp.cpp |
| 缩放 |
modules/imgproc/src/resize.cpp |
test/test_imgwarp.cpp、perf/perf_warp.cpp |
| Canny |
modules/imgproc/src/canny.cpp |
test/test_canny.cpp |
| Sobel/Laplacian |
modules/imgproc/src/deriv.cpp |
test/test_filter.cpp |
| 阈值 |
modules/imgproc/src/thresh.cpp |
test/test_thresh.cpp、perf/perf_threshold.cpp |
| 直方图/反投影 |
modules/imgproc/src/histogram.cpp |
test/test_histograms.cpp |
| 轮廓 |
modules/imgproc/src/contours.cpp、contours_new.cpp、contours_approx.cpp |
test/test_contours.cpp、test/test_contours_new.cpp |
| 几何与形状 |
modules/imgproc/src/geometry.cpp、convhull.cpp |
test/test_convhull.cpp |
| 连通组件 |
modules/imgproc/src/connectedcomponents.cpp |
test/test_connectedcomponents.cpp |
| 分水岭 |
modules/imgproc/src/segmentation.cpp |
test/test_watershed.cpp |
| GrabCut |
modules/imgproc/src/grabcut.cpp |
test/test_grabcut.cpp |
| 漫水填充 |
modules/imgproc/src/floodfill.cpp |
test/test_floodfill.cpp |
| 霍夫变换 |
modules/imgproc/src/hough.cpp |
test/test_houghlines.cpp、test/test_houghcircles.cpp |
| 模板匹配 |
modules/imgproc/src/templmatch.cpp |
test/test_templmatch.cpp |
| 绘制与文字 |
modules/imgproc/src/drawing.cpp |
test/test_drawing.cpp |
| OpenCL kernel |
modules/imgproc/src/opencl/ |
各算法 OCL 测试 |
Imgproc HAL 的公开边界是 modules/imgproc/include/opencv2/imgproc/hal/hal.hpp 和
modules/imgproc/include/opencv2/imgproc/hal/interface.h,默认回退位于
modules/imgproc/src/hal_replacement.hpp。
6. Features2d:检测、描述与匹配
公开 API 入口为 modules/features2d/include/opencv2/features2d.hpp。
| 功能/API |
实现 |
测试/perf |
Feature2D 抽象 |
modules/features2d/src/feature2d.cpp |
test/test_detectors_invariance.cpp |
KeyPoint 工具 |
modules/features2d/src/keypoint.cpp |
test/test_keypoints.cpp |
| FAST |
modules/features2d/src/fast.cpp |
test/test_fast.cpp、perf/perf_fast.cpp |
| AGAST |
modules/features2d/src/agast.cpp |
test/test_fast.cpp |
| ORB |
modules/features2d/src/orb.cpp |
test/test_orb.cpp |
| SIFT |
modules/features2d/src/sift.dispatch.cpp、sift.simd.hpp |
test/test_sift.cpp |
| BRISK |
modules/features2d/src/brisk.cpp |
test/test_brisk.cpp |
| KAZE/AKAZE |
modules/features2d/src/kaze.cpp、akaze.cpp、src/kaze/ |
test/test_akaze.cpp |
| BF/FLANN 匹配器 |
modules/features2d/src/matchers.cpp |
test/test_matchers_algorithmic.cpp |
| Bag of Words |
modules/features2d/src/bagofwords.cpp |
结合匹配器测试验证 |
| 关键点与匹配绘制 |
modules/features2d/src/draw.cpp |
test/test_keypoints.cpp |
定位特征算法时,先区分检测器、描述子和匹配器;ORB 等类可能同时提供检测和描述。
7. Calib3d:多视图几何与标定
公开入口为 modules/calib3d/include/opencv2/calib3d.hpp,兼容 C 接口位于
modules/calib3d/include/opencv2/calib3d/calib3d_c.h。
| 功能/API |
实现 |
测试/perf |
| 相机标定 |
modules/calib3d/src/calibration.cpp |
test/test_cameracalibration.cpp |
| 标定异常参数 |
modules/calib3d/src/calibration.cpp |
test/test_cameracalibration_badarg.cpp |
| PnP 总入口 |
modules/calib3d/src/solvepnp.cpp |
test/test_solvepnp_ransac.cpp |
| EPnP/SQPNP |
modules/calib3d/src/epnp.cpp、sqpnp.cpp |
test/test_solvepnp_ransac.cpp |
| 基础矩阵/单应 |
modules/calib3d/src/fundam.cpp |
test/test_fundam.cpp、test/test_homography.cpp |
| 五点法 |
modules/calib3d/src/five-point.cpp |
test/test_fundam.cpp |
| USAC/RANSAC |
modules/calib3d/src/usac/ |
test/test_modelest.cpp |
| 双目几何 |
modules/calib3d/src/stereo_geom.cpp |
test/test_stereomatching.cpp |
| StereoBM |
modules/calib3d/src/stereobm.cpp |
test/test_stereomatching.cpp |
| StereoSGBM |
modules/calib3d/src/stereosgbm.cpp |
test/test_stereomatching.cpp、perf/perf_stereosgbm.cpp |
| 鱼眼模型 |
modules/calib3d/src/fisheye.cpp |
test/test_fisheye.cpp |
| 去畸变 |
modules/calib3d/src/undistort.dispatch.cpp |
test/test_undistort.cpp、perf/perf_undistort.cpp |
| 棋盘初始化 |
modules/calib3d/src/calibinit.cpp |
test/test_chesscorners.cpp |
| 圆点阵 |
modules/calib3d/src/circlesgrid.cpp |
test/test_cameracalibration.cpp |
| 棋盘快速检查 |
modules/calib3d/src/checkchessboard.cpp |
test/test_chesscorners.cpp |
8. Video:光流、背景建模与跟踪
| 功能/API |
声明 |
实现 |
验证入口 |
| 稀疏 LK 光流 |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/lkpyramid.cpp |
modules/video/test/test_optflowpyrlk.cpp |
| Farneback 稠密光流 |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/optflowgf.cpp |
modules/video/test/ocl/test_optflow_farneback.cpp |
| DIS 光流 |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/dis_flow.cpp |
modules/video/perf/perf_disflow.cpp |
| MOG2 |
modules/video/include/opencv2/video/background_segm.hpp |
modules/video/src/bgfg_gaussmix2.cpp |
modules/video/perf/perf_bgfg_mog2.cpp |
| KNN 背景模型 |
modules/video/include/opencv2/video/background_segm.hpp |
modules/video/src/bgfg_KNN.cpp |
modules/video/test/test_bgfg2.cpp |
| Kalman |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/kalman.cpp |
modules/video/test/test_kalman.cpp |
| CamShift/MeanShift |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/camshift.cpp |
modules/video/test/test_camshift.cpp |
| Tracker 框架 |
modules/video/include/opencv2/video/tracking.hpp |
modules/video/src/tracking/ |
modules/video/test/test_trackers.cpp |
9. 图像、窗口与视频 I/O
9.1 Imgcodecs
| 层次 |
文件 |
作用 |
| 公开 API |
modules/imgcodecs/include/opencv2/imgcodecs.hpp |
imread、imwrite、imdecode、imencode |
| 调度入口 |
modules/imgcodecs/src/loadsave.cpp |
格式探测、解码器/编码器选择 |
| 编解码抽象 |
modules/imgcodecs/src/grfmts.hpp、grfmt_base.cpp |
基类和注册集合 |
| JPEG |
modules/imgcodecs/src/grfmt_jpeg.cpp |
JPEG 读写 |
| PNG |
modules/imgcodecs/src/grfmt_png.cpp |
PNG 读写 |
| TIFF |
modules/imgcodecs/src/grfmt_tiff.cpp |
TIFF 读写 |
| 回归测试 |
modules/imgcodecs/test/test_read_write.cpp |
通用读写 |
| 格式测试 |
modules/imgcodecs/test/test_jpeg.cpp、test_png.cpp、test_tiff.cpp |
格式专项 |
| 性能 |
modules/imgcodecs/perf/perf_decode_encode.cpp |
编解码吞吐 |
9.2 Highgui
| 路径 |
作用 |
modules/highgui/include/opencv2/highgui.hpp |
窗口、事件、控件和图像显示 API |
modules/highgui/src/window.cpp |
通用窗口 API 与后端调用入口 |
modules/highgui/src/registry.impl.hpp |
UI 后端注册 |
modules/highgui/test/test_gui.cpp |
GUI 基础测试 |
9.3 Videoio
| 后端/功能 |
公开或实现入口 |
测试/perf |
VideoCapture/VideoWriter |
modules/videoio/include/opencv2/videoio.hpp、src/cap.cpp |
test/test_video_io.cpp |
| 后端枚举与查询 |
modules/videoio/include/opencv2/videoio/registry.hpp |
test/test_plugins.cpp |
| 后端注册表 |
modules/videoio/src/videoio_registry.cpp |
test/test_dynamic.cpp |
| 插件桥接 |
modules/videoio/src/backend_plugin.cpp |
test/test_plugins.cpp |
| FFmpeg |
modules/videoio/src/cap_ffmpeg.cpp、cap_ffmpeg_impl.hpp |
test/test_ffmpeg.cpp |
| GStreamer |
modules/videoio/src/cap_gstreamer.cpp |
test/test_gstreamer.cpp |
| Linux V4L/V4L2 |
modules/videoio/src/cap_v4l.cpp |
test/test_v4l2.cpp |
| 图像序列 |
modules/videoio/src/cap_images.cpp |
test/test_images.cpp |
| Windows Media Foundation |
modules/videoio/src/cap_msmf.cpp |
test/test_camera.cpp |
| Apple AVFoundation |
modules/videoio/src/cap_avfoundation.mm |
平台测试 |
| 输入性能 |
modules/videoio/perf/perf_input.cpp |
解码/读取吞吐 |
| 输出性能 |
modules/videoio/perf/perf_output.cpp |
编码/写入吞吐 |
10. DNN:模型导入、网络执行与后端
| 层次 |
路径 |
说明 |
| 聚合公开头 |
modules/dnn/include/opencv2/dnn.hpp |
常用 DNN API |
| 网络与模型 API |
modules/dnn/include/opencv2/dnn/dnn.hpp |
Net、blob、模型读取、NMS |
| 层基类 |
modules/dnn/include/opencv2/dnn/layer.hpp |
Layer 生命周期与后端支持 |
| 层声明集合 |
modules/dnn/include/opencv2/dnn/all_layers.hpp |
内置层类型 |
Net 外观 |
modules/dnn/src/net.cpp |
公开成员函数入口 |
Net 内部执行 |
modules/dnn/src/net_impl.cpp |
图、内存、forward 主逻辑 |
| 后端选择 |
modules/dnn/src/net_impl_backend.cpp |
backend/target 分派 |
| 通用模型读取 |
modules/dnn/src/dnn_read.cpp |
按格式读取模型 |
| 层工厂 |
modules/dnn/src/layer_factory.cpp |
层注册与构造 |
| CPU 层实现 |
modules/dnn/src/layers/ |
卷积、池化、激活、检测等 |
| ONNX 导入 |
modules/dnn/src/onnx/onnx_importer.cpp |
ONNX 图解析与层转换 |
| TensorFlow 导入 |
modules/dnn/src/tensorflow/tf_importer.cpp |
TensorFlow 图导入 |
| Darknet 导入 |
modules/dnn/src/darknet/darknet_importer.cpp |
cfg/weights 导入 |
| CUDA 后端 |
modules/dnn/src/cuda4dnn/ |
CUDA primitive、kernel 与封装 |
| OpenCL kernel |
modules/dnn/src/opencl/ |
OpenCL 层内核 |
| 网络综合测试 |
modules/dnn/test/test_misc.cpp |
Net 行为与杂项回归 |
| 层测试 |
modules/dnn/test/test_layers.cpp |
层正确性与后端对齐 |
| ONNX 测试 |
modules/dnn/test/test_onnx_importer.cpp |
导入回归 |
| NMS 测试 |
modules/dnn/test/test_nms.cpp |
NMS 与边界条件 |
| 网络性能 |
modules/dnn/perf/perf_net.cpp |
网络 forward 性能 |
| 层性能 |
modules/dnn/perf/perf_convolution3d.cpp |
代表性的卷积基准 |
排查 DNN 数值差异时,应同时记录模型导入器、层实现、backend 和 target;只检查
net.cpp 往往无法看到真正的计算内核。
11. G-API:计算图、编译器与后端
| 层次 |
路径 |
说明 |
| 聚合头 |
modules/gapi/include/opencv2/gapi.hpp |
常用图 API |
| 图计算 |
modules/gapi/include/opencv2/gapi/gcomputation.hpp |
GComputation |
| 图数据 |
modules/gapi/include/opencv2/gapi/gmat.hpp |
GMat 等图节点数据 |
| Kernel 声明 |
modules/gapi/include/opencv2/gapi/gkernel.hpp |
操作与实现包 |
| 流式输入 |
modules/gapi/include/opencv2/gapi/streaming/source.hpp |
流源接口 |
| 图 API 实现 |
modules/gapi/src/api/gcomputation.cpp |
compile/apply 入口 |
| 编译器 |
modules/gapi/src/compiler/gcompiler.cpp |
编译阶段组织 |
| 图模型 |
modules/gapi/src/compiler/gmodel.cpp |
内部图表示 |
| 编译 passes |
modules/gapi/src/compiler/passes/ |
meta、islands、kernels、exec 等 |
| CPU 后端 |
modules/gapi/src/backends/cpu/gcpubackend.cpp |
CPU kernel 执行 |
| OpenCL 后端 |
modules/gapi/src/backends/ocl/goclbackend.cpp |
OCL 后端 |
| Fluid 后端 |
modules/gapi/src/backends/fluid/gfluidbackend.cpp |
流水化执行 |
| 核心测试 |
modules/gapi/test/gapi_mat_tests.cpp |
图数据语义 |
| 流式测试 |
modules/gapi/test/streaming/gapi_streaming_tests.cpp |
streaming 行为 |
| Fluid 测试 |
modules/gapi/test/gapi_fluid_test.cpp |
Fluid 后端 |
12. Stitching:全景拼接流水线
| 组件 |
公开声明 |
实现 |
高层 Stitcher |
modules/stitching/include/opencv2/stitching.hpp |
modules/stitching/src/stitcher.cpp |
| 特征匹配 |
modules/stitching/include/opencv2/stitching/detail/matchers.hpp |
modules/stitching/src/matchers.cpp |
| 运动估计与 BA |
modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp |
modules/stitching/src/motion_estimators.cpp |
| 自动标定 |
modules/stitching/include/opencv2/stitching/detail/autocalib.hpp |
modules/stitching/src/autocalib.cpp |
| 缝线搜索 |
modules/stitching/include/opencv2/stitching/detail/seam_finders.hpp |
modules/stitching/src/seam_finders.cpp |
| 曝光补偿 |
modules/stitching/include/opencv2/stitching/detail/exposure_compensate.hpp |
modules/stitching/src/exposure_compensate.cpp |
| 融合 |
modules/stitching/include/opencv2/stitching/detail/blenders.hpp |
modules/stitching/src/blenders.cpp |
| 图像变换 |
modules/stitching/include/opencv2/stitching/warpers.hpp |
modules/stitching/src/warpers.cpp |
| 匹配测试 |
modules/stitching/test/test_matchers.cpp |
组件级验证 |
| 融合测试 |
modules/stitching/test/test_blenders.cpp |
融合验证 |
| 性能 |
modules/stitching/perf/perf_stich.cpp |
拼接性能入口 |
13. Objdetect:级联、HOG、二维码与 ArUco
| 功能 |
声明 |
实现/测试 |
| 级联分类器 |
modules/objdetect/include/opencv2/objdetect.hpp |
src/cascadedetect.cpp、test/test_cascadeandhog.cpp |
| HOG 检测 |
modules/objdetect/include/opencv2/objdetect.hpp |
src/hog.cpp、test/test_cascadeandhog.cpp |
| QRCode |
modules/objdetect/include/opencv2/objdetect.hpp |
src/qrcode.cpp、test/test_qrcode.cpp |
| ArUco 检测器 |
modules/objdetect/include/opencv2/objdetect/aruco_detector.hpp |
src/aruco/aruco_detector.cpp |
| ArUco 字典 |
modules/objdetect/include/opencv2/objdetect/aruco_dictionary.hpp |
src/aruco/aruco_dictionary.cpp |
| Board |
modules/objdetect/include/opencv2/objdetect/aruco_board.hpp |
test/test_boarddetection.cpp |
| ChArUco |
modules/objdetect/include/opencv2/objdetect/charuco_detector.hpp |
src/aruco/ |
| 人脸接口 |
modules/objdetect/include/opencv2/objdetect/face.hpp |
modules/objdetect/src/ |
14. Photo:修复、克隆、去噪与 HDR
公开入口为 modules/photo/include/opencv2/photo.hpp,CUDA 相关声明位于
modules/photo/include/opencv2/photo/cuda.hpp。
| 功能/API |
实现 |
验证入口 |
图像修复 inpaint |
modules/photo/src/inpaint.cpp |
test/test_inpaint.cpp、perf/perf_inpaint.cpp |
| 无缝克隆 |
modules/photo/src/seamless_cloning.cpp |
test/test_cloning.cpp |
| 非局部均值去噪 |
modules/photo/src/denoising.cpp |
test/test_denoising.cpp |
| HDR 对齐 |
modules/photo/src/align.cpp |
test/test_hdr.cpp |
| 相机响应标定 |
modules/photo/src/calibrate.cpp |
test/test_hdr.cpp |
| HDR 合并 |
modules/photo/src/merge.cpp |
test/test_hdr.cpp |
| 色调映射 |
modules/photo/src/tonemap.cpp |
test/test_hdr.cpp |
| HDR 公共内部逻辑 |
modules/photo/src/hdr_common.cpp |
由 HDR 各阶段共用 |
15. HAL、SIMD、OpenCL 与运行时分派
15.1 HAL 边界
| 路径 |
用途 |
modules/core/include/opencv2/core/hal/interface.h |
Core HAL C 风格接口与类型 |
modules/core/include/opencv2/core/hal/hal.hpp |
Core HAL 包装 |
modules/imgproc/include/opencv2/imgproc/hal/interface.h |
Imgproc HAL 接口 |
modules/imgproc/include/opencv2/imgproc/hal/hal.hpp |
Imgproc HAL 包装 |
modules/core/src/hal_replacement.hpp |
Core 默认实现映射 |
modules/imgproc/src/hal_replacement.hpp |
Imgproc 默认实现映射 |
modules/calib3d/src/hal_replacement.hpp |
Calib3d 默认 HAL 回退 |
modules/video/src/hal_replacement.hpp |
Video 默认 HAL 回退 |
15.2 通用 SIMD
| 路径 |
架构/作用 |
modules/core/include/opencv2/core/hal/intrin.hpp |
通用 SIMD 聚合入口 |
modules/core/include/opencv2/core/hal/intrin_cpp.hpp |
可移植向量抽象 |
modules/core/include/opencv2/core/hal/intrin_sse.hpp |
x86 SSE |
modules/core/include/opencv2/core/hal/intrin_avx.hpp |
x86 AVX |
modules/core/include/opencv2/core/hal/intrin_avx512.hpp |
x86 AVX-512 |
modules/core/include/opencv2/core/hal/intrin_neon.hpp |
Arm NEON |
modules/core/include/opencv2/core/hal/intrin_vsx.hpp |
Power VSX |
modules/core/include/opencv2/core/hal/intrin_wasm.hpp |
WebAssembly SIMD |
modules/core/include/opencv2/core/hal/intrin_rvv_scalable.hpp |
RISC-V 可伸缩向量 |
modules/core/include/opencv2/core/hal/intrin_lsx.hpp |
LoongArch LSX |
modules/core/include/opencv2/core/hal/intrin_lasx.hpp |
LoongArch LASX |
15.3 树内 HAL 实现
| HAL |
路径 |
主要目标 |
| Carotene |
hal/carotene/ |
Arm NEON 优化 |
| FastCV |
hal/fastcv/ |
Qualcomm FastCV |
| IPP |
hal/ipp/ |
Intel IPP |
| NDSRVP |
hal/ndsrvp/ |
Andes RVP/DSP |
| OpenVX |
hal/openvx/ |
OpenVX |
| RISC-V RVV |
hal/riscv-rvv/ |
RISC-V Vector |
| KleidiCV |
hal/kleidicv/ |
Arm KleidiCV |
| 自定义 HAL 示例 |
samples/hal/c_hal/、samples/hal/slow_hal/ |
外接 HAL 的构建与替换方式 |
典型调用链是“公开 API → 普通入口 → HAL 宏/函数 → 外部 HAL 或默认替换 → SIMD/标量”。
若输入是 UMat,还可能在普通 CPU 路径之前进入 src/opencl/ 中的 kernel。
16. CMake:从模块声明到 CPU 分派
| 文件 |
定位价值 |
CMakeLists.txt |
全局选项、平台初始化和模块构建入口 |
cmake/OpenCVModule.cmake |
ocv_define_module 等模块基础宏 |
cmake/OpenCVCompilerOptimizations.cmake |
CPU baseline/dispatch 检测和编译策略 |
cmake/OpenCVFindLibsGrfmt.cmake |
图像格式依赖 |
cmake/OpenCVFindLibsGUI.cmake |
GUI 依赖 |
cmake/OpenCVFindLibsPerf.cmake |
性能相关依赖 |
cmake/templates/cvconfig.h.in |
生成构建能力宏 |
cmake/templates/OpenCVConfig.cmake.in |
安装后的 CMake 包配置 |
modules/core/CMakeLists.txt |
Core、并行与 CPU 分派 |
modules/imgproc/CMakeLists.txt |
Imgproc 源文件与 HAL |
modules/videoio/CMakeLists.txt |
视频后端条件编译 |
modules/dnn/CMakeLists.txt |
DNN 模型格式与后端 |
modules/gapi/CMakeLists.txt |
G-API 后端与依赖 |
modules/world/CMakeLists.txt |
聚合动态/静态库 |
阅读 .dispatch.cpp 时,同时在模块 CMakeLists.txt 中搜索
ocv_add_dispatched_file,可确认哪些源码会按 ISA 生成多个编译变体。
17. 语言绑定
17.1 Python
| 路径 |
作用 |
modules/python/CMakeLists.txt |
Python 模块总构建入口 |
modules/python/bindings/CMakeLists.txt |
绑定生成目标 |
modules/python/python3/CMakeLists.txt |
Python 3 扩展构建 |
modules/python/src2/hdr_parser.py |
解析带导出标注的 C++ 头 |
modules/python/src2/gen2.py |
生成 C++ Python 包装代码 |
modules/python/src2/typing_stubs_generation/ |
生成 Python 类型提示 |
modules/python/test/test_mat.py |
Mat/ndarray 行为 |
modules/python/test/test_features2d.py |
特征 API 绑定 |
modules/python/test/test_imread.py |
图像读取绑定 |
modules/python/test/tests_common.py |
Python 测试公共设施 |
Python API 不一定有手写的同名包装函数;应先查 C++ 公开头上的导出标注,再查生成器。
17.2 Java
| 路径 |
作用 |
modules/java/CMakeLists.txt |
Java 模块入口 |
modules/java/jni/CMakeLists.txt |
JNI 本地库构建 |
modules/java/generator/gen_java.py |
Java/JNI 代码生成 |
modules/java/generator/src/cpp/opencv_java.cpp |
本地绑定公共入口 |
modules/java/generator/src/cpp/Mat.cpp |
Mat 的 JNI 支撑 |
modules/java/generator/src/cpp/converters.cpp |
Java/C++ 类型转换 |
modules/java/generator/src/java/org/opencv/utils/Converters.java |
Java 侧转换工具 |
modules/java/test/pure_test/src/ |
Java 绑定测试 |
17.3 JavaScript
| 路径 |
作用 |
modules/js/generator/CMakeLists.txt |
JS 绑定生成 |
modules/js/generator/embindgen.py |
Embind 包装生成 |
modules/js/src/core_bindings.cpp |
手写核心绑定 |
modules/js/src/helpers.js |
JS 运行时辅助 |
modules/js/src/make_umd.py |
UMD 输出辅助 |
platforms/js/build_js.py |
WebAssembly/JS 构建入口 |
platforms/js/opencv_js.config.py |
导出 API 配置 |
modules/js/test/test_core.js |
Core JS 测试 |
modules/js/test/test_imgproc.js |
Imgproc JS 测试 |
modules/js/test/test_calib3d.js |
Calib3d JS 测试 |
Objective-C 构建入口可从 modules/objc/CMakeLists.txt 和
modules/objc/generator/CMakeLists.txt 开始。
18. 测试与性能基准的阅读方法
| 目录/文件 |
作用 |
modules/ts/include/opencv2/ts/ |
OpenCV 测试系统的断言、数据和性能宏 |
modules/ts/CMakeLists.txt |
测试支撑库构建 |
modules/<name>/test/test_main.cpp |
模块测试程序入口 |
modules/<name>/test/test_*.cpp |
正确性、边界、回归和坏参数测试 |
modules/<name>/perf/perf_main.cpp |
模块性能程序入口 |
modules/<name>/perf/perf_*.cpp |
参数化性能用例 |
19. 从 API 找到声明、实现、测试和 perf
以一个 API 名称 foo 为例,可按下列顺序查找:
- 在
modules/*/include/opencv2/ 搜索 foo,确认命名空间、重载和默认参数;
- 在
modules/*/src/ 搜索 foo( 或类的 ClassName::foo;
- 若入口只有包装,继续跟踪
CV_OCL_RUN、CALL_HAL、CV_CPU_DISPATCH;
- 查看同目录的
.dispatch.cpp、.simd.hpp 和 src/opencl/*.cl;
- 在
modules/*/test/ 搜索 API 名、测试夹具名和相关枚举;
- 在
modules/*/perf/ 搜索 API 名,确认性能参数;
- 在
samples/ 搜索调用方式,观察输入准备和完整数据流;
- 在模块
CMakeLists.txt 中确认文件是否受平台或依赖条件控制。
19.1 常见“搜索不到实现”的原因
| 现象 |
应继续检查 |
| 只找到头文件声明 |
搜索类成员限定名、宏展开后的底层名字 |
| 实现只做参数检查 |
查后续内部函数、HAL、IPP、OpenCL 或 backend |
找到 .dispatch.cpp |
再查同名前缀的 .simd.hpp |
| 找到工厂函数 |
查注册表、创建器和具体派生类 |
| Python/Java 名称与 C++ 不同 |
查绑定生成器和公开头导出标注 |
| Videoio 在不同机器行为不同 |
查后端注册表、插件和构建配置 |
| DNN 结果依设备而异 |
查 backend、target、层支持判断和 fallback |
20. 任务到源码速查
| 任务 |
首选源码入口 |
研究 Mat 浅拷贝和引用计数 |
modules/core/src/matrix.cpp |
| 研究 ROI/步长/连续性 |
modules/core/include/opencv2/core/mat.hpp、src/matrix.cpp |
| 优化加减乘除 |
modules/core/src/arithm.cpp、arithm.dispatch.cpp、arithm.simd.hpp |
| 优化矩阵乘法 |
modules/core/src/matmul.dispatch.cpp、matmul.simd.hpp |
| 修改 GaussianBlur |
modules/imgproc/src/smooth.dispatch.cpp、smooth.simd.hpp |
| 修改 resize/remap/warp |
modules/imgproc/src/resize.cpp、imgwarp.cpp |
| 修改颜色转换 |
modules/imgproc/src/color.cpp、color_*.dispatch.cpp |
| 修改 Canny |
modules/imgproc/src/canny.cpp、src/opencl/canny.cl |
| 修改轮廓算法 |
modules/imgproc/src/contours.cpp、contours_new.cpp |
| 修改 ORB/SIFT |
modules/features2d/src/orb.cpp、sift.dispatch.cpp |
| 修改匹配器 |
modules/features2d/src/matchers.cpp |
| 修改单应/RANSAC |
modules/calib3d/src/fundam.cpp、src/usac/ |
| 修改标定/PnP |
modules/calib3d/src/calibration.cpp、solvepnp.cpp |
| 修改光流 |
modules/video/src/lkpyramid.cpp、optflowgf.cpp、dis_flow.cpp |
| 排查摄像头打不开 |
modules/videoio/src/cap.cpp、videoio_registry.cpp、具体后端 |
| 添加视频后端 |
modules/videoio/src/backend_plugin.cpp、videoio_registry.cpp |
| 添加图像格式 |
modules/imgcodecs/src/loadsave.cpp、grfmts.hpp、对应 grfmt_* |
| 修改 DNN 模型导入 |
modules/dnn/src/onnx/、tensorflow/ 或 darknet/ |
| 添加 DNN 层 |
modules/dnn/src/layers/、layer_factory.cpp |
| 排查 DNN backend fallback |
modules/dnn/src/net_impl_backend.cpp |
| 修改 G-API 图编译 |
modules/gapi/src/compiler/ |
| 修改拼接接缝/融合 |
modules/stitching/src/seam_finders.cpp、blenders.cpp |
| 修改 QR/ArUco |
modules/objdetect/src/qrcode.cpp、src/aruco/ |
| 修改修复/克隆 |
modules/photo/src/inpaint.cpp、seamless_cloning.cpp |
| 添加 Python 暴露 |
C++ 公开头、modules/python/src2/ |
| 添加 JS 暴露 |
platforms/js/opencv_js.config.py、modules/js/generator/ |
21. 推荐断点
| 调试目标 |
推荐断点 |
Mat 分配/释放 |
modules/core/src/matrix.cpp 中 Mat::create、Mat::release |
| 错误抛出 |
modules/core/src/system.cpp 中 cv::error |
| CPU 能力与优化开关 |
modules/core/src/system.cpp 中硬件支持查询 |
| 算术调用链 |
modules/core/src/arithm.cpp 中对应公开函数 |
| 并行执行 |
modules/core/src/parallel.cpp 中 parallel_for_ |
| OpenCL 是否启用 |
modules/core/src/ocl.cpp 中 useOpenCL 相关逻辑 |
| 图像读取 |
modules/imgcodecs/src/loadsave.cpp 中 imread_ |
| 图像写入 |
modules/imgcodecs/src/loadsave.cpp 中 imwrite_ |
| 视频后端选择 |
modules/videoio/src/cap.cpp 中 VideoCapture::open |
| 后端注册 |
modules/videoio/src/videoio_registry.cpp 中 backend 查询 |
| 特征匹配 |
modules/features2d/src/matchers.cpp 中 DescriptorMatcher 调用 |
| 单应估计 |
modules/calib3d/src/fundam.cpp 中 findHomography |
| PnP |
modules/calib3d/src/solvepnp.cpp 中 solvePnP |
| DNN forward |
modules/dnn/src/net.cpp 中 Net::forward |
| DNN 内部执行 |
modules/dnn/src/net_impl.cpp 中 forward 相关内部函数 |
| DNN 后端选择 |
modules/dnn/src/net_impl_backend.cpp 中后端初始化 |
| G-API 编译 |
modules/gapi/src/compiler/gcompiler.cpp 中编译入口 |
| 拼接主流程 |
modules/stitching/src/stitcher.cpp 中 estimateTransform、composePanorama |
| ArUco 检测 |
modules/objdetect/src/aruco/aruco_detector.cpp 中 detectMarkers |
断点若始终不命中,先确认是否走 OpenCL、IPP、插件、CUDA 或 CPU 分派版本,并核对当前
构建是否包含调试符号。
22. 二次开发的典型修改点
| 目标 |
最小修改范围 |
必须补充 |
| 新增普通 C++ API |
模块公开头、src/ 实现 |
文档注释、正确性测试 |
| 新增可导出的绑定 API |
公开头及生成器可识别标注 |
Python/Java/JS 对应测试 |
| 新增图像处理算法 |
modules/imgproc/include/、src/ |
边界测试、类型组合、perf |
| 新增 SIMD 路径 |
.dispatch.cpp、.simd.hpp、模块 CMake |
标量一致性和多 ISA 构建 |
| 新增 HAL 实现 |
HAL 接口、外部实现、CMake |
默认回退和不支持返回语义 |
| 新增 OpenCL 路径 |
CPU 入口、src/opencl/*.cl |
CPU/OCL 结果一致性测试 |
| 新增 Videoio 后端 |
后端实现、注册表、模块 CMake |
插件/静态构建、属性测试 |
| 新增 DNN 层 |
层声明/实现、层工厂 |
导入映射、各后端 fallback、测试 |
| 新增 G-API kernel |
G-API 声明、后端实现 |
kernel package 和编译测试 |
| 修改拼接组件 |
stitching/detail 接口和对应实现 |
单组件测试与端到端样例 |
| 新增 ArUco 字典/检测逻辑 |
objdetect 公开头与 src/aruco/ |
字典、旋转、误码测试 |
修改原则:先保留可靠的标量实现,再增加加速路径;先补最小回归测试,再运行宽参数 perf。
23. 官方 Demo 到源码映射
| Demo |
展示主题 |
反查源码 |
samples/cpp/tutorial_code/core/mat_the_basic_image_container/mat_the_basic_image_container.cpp |
Mat 所有权与构造 |
modules/core/src/matrix.cpp |
samples/cpp/tutorial_code/core/mat_operations/mat_operations.cpp |
矩阵访问与操作 |
modules/core/include/opencv2/core/mat.hpp |
samples/cpp/edge.cpp |
灰度、模糊、Canny |
modules/imgproc/src/canny.cpp、smooth.dispatch.cpp |
samples/cpp/tutorial_code/ImgProc/Smoothing/Smoothing.cpp |
多种平滑 |
modules/imgproc/src/smooth.dispatch.cpp |
samples/cpp/tutorial_code/ImgProc/Threshold.cpp |
阈值 |
modules/imgproc/src/thresh.cpp |
samples/cpp/tutorial_code/ShapeDescriptors/findContours_demo.cpp |
轮廓 |
modules/imgproc/src/contours.cpp |
samples/cpp/tutorial_code/ImgTrans/houghlines.cpp |
霍夫线 |
modules/imgproc/src/hough.cpp |
samples/cpp/tutorial_code/Histograms_Matching/MatchTemplate_Demo.cpp |
模板匹配 |
modules/imgproc/src/templmatch.cpp |
samples/cpp/tutorial_code/features2D/AKAZE_match.cpp |
AKAZE 与匹配 |
modules/features2d/src/akaze.cpp、matchers.cpp |
samples/python/find_obj.py |
特征、匹配、单应 |
features2d 与 calib3d/src/fundam.cpp |
samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp |
相机标定 |
modules/calib3d/src/calibration.cpp |
samples/cpp/stereo_match.cpp |
双目匹配 |
modules/calib3d/src/stereobm.cpp、stereosgbm.cpp |
samples/python/opt_flow.py |
稀疏光流 |
modules/video/src/lkpyramid.cpp |
samples/cpp/tutorial_code/video/optical_flow/optical_flow_dense.cpp |
稠密光流 |
modules/video/src/optflowgf.cpp |
samples/cpp/tutorial_code/video/bg_sub.cpp |
背景建模 |
modules/video/src/bgfg_gaussmix2.cpp |
samples/cpp/kalman.cpp |
Kalman |
modules/video/src/kalman.cpp |
samples/cpp/videocapture_basic.cpp |
摄像头读取 |
modules/videoio/src/cap.cpp |
samples/cpp/facedetect.cpp |
级联人脸检测 |
modules/objdetect/src/cascadedetect.cpp |
samples/cpp/peopledetect.cpp |
HOG 行人检测 |
modules/objdetect/src/hog.cpp |
samples/cpp/tutorial_code/photo/seamless_cloning/cloning_demo.cpp |
无缝克隆 |
modules/photo/src/seamless_cloning.cpp |
samples/cpp/tutorial_code/photo/hdr_imaging/hdr_imaging.cpp |
HDR 流水线 |
modules/photo/src/align.cpp、calibrate.cpp、merge.cpp、tonemap.cpp |
samples/dnn/object_detection.cpp |
DNN 目标检测 |
modules/dnn/src/net.cpp、net_impl.cpp |
samples/dnn/segmentation.cpp |
DNN 语义分割 |
modules/dnn/src/layers/ |
samples/dnn/face_detect.cpp |
DNN 人脸检测 |
modules/dnn/src/onnx/ 与网络执行层 |
24. 推荐阅读路线
- 从
modules/core/include/opencv2/core/mat.hpp 和 modules/core/src/matrix.cpp 理解数据模型。
- 选择一个熟悉的 Imgproc API,对照公开声明、CPU 实现、测试和 perf。
- 阅读一个
.dispatch.cpp 与其 .simd.hpp,理解 CPU 分派。
- 对照
hal_replacement.hpp 和 hal/,理解默认实现与外接实现。
- 阅读 Features2d → Calib3d 的匹配与几何估计链。
- 阅读 Videoio 的注册表与两个不同平台后端,理解运行时选择。
- 阅读 DNN 的导入器 →
Net → layer → backend 数据流。
- 阅读 G-API 的 API → 图模型 → passes → backend 编译流程。
- 最后回到根
CMakeLists.txt、cmake/OpenCVModule.cmake 和模块 CMake 串联构建。
正在加载留言…