OpenCV 4.13.0 源码文件索引与导航

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.hppmodules/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.hppmodules/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.cppmodules/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.cppmodules/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.cppmodules/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.cppmodules/core/src/parallel/
文件存储 modules/core/include/opencv2/core/persistence.hpp modules/core/src/persistence.cpppersistence_xml.cpppersistence_yml.cpppersistence_json.cpp
OpenCL/UMat modules/core/include/opencv2/core/ocl.hpp modules/core/src/ocl.cppmodules/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.cppmodules/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.cppfilterengine.hpp test/test_filter.cppperf/perf_filter2d.cpp
平滑与高斯滤波 modules/imgproc/src/smooth.dispatch.cppsmooth.simd.hpp test/test_filter.cpp
双边滤波 modules/imgproc/src/bilateral_filter.dispatch.cppbilateral_filter.simd.hpp test/test_filter.cpp
中值滤波 modules/imgproc/src/median_blur.dispatch.cpp test/test_filter.cpp
形态学 modules/imgproc/src/morph.dispatch.cppmorph.simd.hpp test/test_filter.cpp
颜色转换总入口 modules/imgproc/src/color.cpp test/test_color.cppperf/perf_cvt_color.cpp
RGB/灰度转换 modules/imgproc/src/color_rgb.dispatch.cppcolor_rgb.simd.hpp test/test_color.cpp
HSV 转换 modules/imgproc/src/color_hsv.dispatch.cppcolor_hsv.simd.hpp test/test_color.cpp
YUV 转换 modules/imgproc/src/color_yuv.dispatch.cppcolor_yuv.simd.hpp test/test_color.cpp
仿射/透视/重映射 modules/imgproc/src/imgwarp.cpp test/test_imgwarp.cppperf/perf_warp.cpp
缩放 modules/imgproc/src/resize.cpp test/test_imgwarp.cppperf/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.cppperf/perf_threshold.cpp
直方图/反投影 modules/imgproc/src/histogram.cpp test/test_histograms.cpp
轮廓 modules/imgproc/src/contours.cppcontours_new.cppcontours_approx.cpp test/test_contours.cpptest/test_contours_new.cpp
几何与形状 modules/imgproc/src/geometry.cppconvhull.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.cpptest/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.cppperf/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.cppsift.simd.hpp test/test_sift.cpp
BRISK modules/features2d/src/brisk.cpp test/test_brisk.cpp
KAZE/AKAZE modules/features2d/src/kaze.cppakaze.cppsrc/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.cppsqpnp.cpp test/test_solvepnp_ransac.cpp
基础矩阵/单应 modules/calib3d/src/fundam.cpp test/test_fundam.cpptest/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.cppperf/perf_stereosgbm.cpp
鱼眼模型 modules/calib3d/src/fisheye.cpp test/test_fisheye.cpp
去畸变 modules/calib3d/src/undistort.dispatch.cpp test/test_undistort.cppperf/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 imreadimwriteimdecodeimencode
调度入口 modules/imgcodecs/src/loadsave.cpp 格式探测、解码器/编码器选择
编解码抽象 modules/imgcodecs/src/grfmts.hppgrfmt_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.cpptest_png.cpptest_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.hppsrc/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.cppcap_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.cpptest/test_cascadeandhog.cpp
HOG 检测 modules/objdetect/include/opencv2/objdetect.hpp src/hog.cpptest/test_cascadeandhog.cpp
QRCode modules/objdetect/include/opencv2/objdetect.hpp src/qrcode.cpptest/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.cppperf/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 为例,可按下列顺序查找:

  1. modules/*/include/opencv2/ 搜索 foo,确认命名空间、重载和默认参数;
  2. modules/*/src/ 搜索 foo( 或类的 ClassName::foo
  3. 若入口只有包装,继续跟踪 CV_OCL_RUNCALL_HALCV_CPU_DISPATCH
  4. 查看同目录的 .dispatch.cpp.simd.hppsrc/opencl/*.cl
  5. modules/*/test/ 搜索 API 名、测试夹具名和相关枚举;
  6. modules/*/perf/ 搜索 API 名,确认性能参数;
  7. samples/ 搜索调用方式,观察输入准备和完整数据流;
  8. 在模块 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.hppsrc/matrix.cpp
优化加减乘除 modules/core/src/arithm.cpparithm.dispatch.cpparithm.simd.hpp
优化矩阵乘法 modules/core/src/matmul.dispatch.cppmatmul.simd.hpp
修改 GaussianBlur modules/imgproc/src/smooth.dispatch.cppsmooth.simd.hpp
修改 resize/remap/warp modules/imgproc/src/resize.cppimgwarp.cpp
修改颜色转换 modules/imgproc/src/color.cppcolor_*.dispatch.cpp
修改 Canny modules/imgproc/src/canny.cppsrc/opencl/canny.cl
修改轮廓算法 modules/imgproc/src/contours.cppcontours_new.cpp
修改 ORB/SIFT modules/features2d/src/orb.cppsift.dispatch.cpp
修改匹配器 modules/features2d/src/matchers.cpp
修改单应/RANSAC modules/calib3d/src/fundam.cppsrc/usac/
修改标定/PnP modules/calib3d/src/calibration.cppsolvepnp.cpp
修改光流 modules/video/src/lkpyramid.cppoptflowgf.cppdis_flow.cpp
排查摄像头打不开 modules/videoio/src/cap.cppvideoio_registry.cpp、具体后端
添加视频后端 modules/videoio/src/backend_plugin.cppvideoio_registry.cpp
添加图像格式 modules/imgcodecs/src/loadsave.cppgrfmts.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.cppblenders.cpp
修改 QR/ArUco modules/objdetect/src/qrcode.cppsrc/aruco/
修改修复/克隆 modules/photo/src/inpaint.cppseamless_cloning.cpp
添加 Python 暴露 C++ 公开头、modules/python/src2/
添加 JS 暴露 platforms/js/opencv_js.config.pymodules/js/generator/

21. 推荐断点

调试目标 推荐断点
Mat 分配/释放 modules/core/src/matrix.cppMat::createMat::release
错误抛出 modules/core/src/system.cppcv::error
CPU 能力与优化开关 modules/core/src/system.cpp 中硬件支持查询
算术调用链 modules/core/src/arithm.cpp 中对应公开函数
并行执行 modules/core/src/parallel.cppparallel_for_
OpenCL 是否启用 modules/core/src/ocl.cppuseOpenCL 相关逻辑
图像读取 modules/imgcodecs/src/loadsave.cppimread_
图像写入 modules/imgcodecs/src/loadsave.cppimwrite_
视频后端选择 modules/videoio/src/cap.cppVideoCapture::open
后端注册 modules/videoio/src/videoio_registry.cpp 中 backend 查询
特征匹配 modules/features2d/src/matchers.cppDescriptorMatcher 调用
单应估计 modules/calib3d/src/fundam.cppfindHomography
PnP modules/calib3d/src/solvepnp.cppsolvePnP
DNN forward modules/dnn/src/net.cppNet::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.cppestimateTransformcomposePanorama
ArUco 检测 modules/objdetect/src/aruco/aruco_detector.cppdetectMarkers

断点若始终不命中,先确认是否走 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.cppsmooth.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.cppmatchers.cpp
samples/python/find_obj.py 特征、匹配、单应 features2dcalib3d/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.cppstereosgbm.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.cppcalibrate.cppmerge.cpptonemap.cpp
samples/dnn/object_detection.cpp DNN 目标检测 modules/dnn/src/net.cppnet_impl.cpp
samples/dnn/segmentation.cpp DNN 语义分割 modules/dnn/src/layers/
samples/dnn/face_detect.cpp DNN 人脸检测 modules/dnn/src/onnx/ 与网络执行层

24. 推荐阅读路线

  1. modules/core/include/opencv2/core/mat.hppmodules/core/src/matrix.cpp 理解数据模型。
  2. 选择一个熟悉的 Imgproc API,对照公开声明、CPU 实现、测试和 perf。
  3. 阅读一个 .dispatch.cpp 与其 .simd.hpp,理解 CPU 分派。
  4. 对照 hal_replacement.hpphal/,理解默认实现与外接实现。
  5. 阅读 Features2d → Calib3d 的匹配与几何估计链。
  6. 阅读 Videoio 的注册表与两个不同平台后端,理解运行时选择。
  7. 阅读 DNN 的导入器 → Net → layer → backend 数据流。
  8. 阅读 G-API 的 API → 图模型 → passes → backend 编译流程。
  9. 最后回到根 CMakeLists.txtcmake/OpenCVModule.cmake 和模块 CMake 串联构建。

文章互动

阅读 --

留言

0 条留言

正在加载留言…