本文档对 OpenCV 的完整算法体系做系统性梳理,涵盖 10+ 模块、100+ 核心算法函数,并给出选型决策建议。
一、模块架构总览
OpenCV 采用分层模块化设计,按职责分为五大层次:
| 层次 | 模块 | 核心职责 |
|---|---|---|
| 基础 I/O 层 | core, imgcodecs, videoio, highgui | 数据结构 (Mat)、图像/视频读写、GUI 显示 |
| 图像处理层 | imgproc, photo, stitching | 像素级变换、滤波增强、计算摄影、全景拼接 |
| 特征与检测层 | features2d, xfeatures2d, objdetect, flann | 关键点检测、描述子、目标检测、近似最近邻 |
| 视频分析层 | video | 光流、背景建模、目标跟踪 |
| 智能算法层 | ml, dnn, calib3d | 经典机器学习、深度学习推理、相机标定与 3D 几何 |
设计哲学:所有模块共享 core 中的 Mat 数据结构,模块间通过 Mat 传递数据,形成统一的流水线。GPU 加速通过 UMat(透明 OpenCL)和各 cuda* 模块实现。
二、imgproc — 图像处理算法详解
imgproc 是 OpenCV 中算法最密集的模块,包含八大算法类别:
2.1 图像滤波
| 函数 | 用途 | 特点 |
|---|---|---|
blur / boxFilter |
均值滤波 | 最快,但模糊边缘 |
GaussianBlur |
高斯滤波 | 最常用,高斯噪声效果好 |
medianBlur |
中值滤波 | 椒盐噪声首选,保边缘 |
bilateralFilter |
双边滤波 | 保边去噪,但速度慢 |
filter2D |
自定义卷积核 | 通用卷积接口 |
选型原则:高斯噪声 → GaussianBlur;椒盐噪声 → medianBlur;需保边 → bilateralFilter。
2.2 形态学操作
erode(腐蚀)/dilate(膨胀):基础操作morphologyEx:封装了开运算(去噪点)、闭运算(填孔洞)、梯度(提取边缘)、顶帽/黑帽(校正光照不均)- 核心参数:
getStructuringElement(MORPH_RECT / MORPH_ELLIPSE / MORPH_CROSS)
2.3 阈值化
| 函数 | 场景 |
|---|---|
threshold |
全局阈值,支持 BINARY / TOZERO / TRUNC 等 |
threshold + THRESH_OTSU |
Otsu 自动阈值(双峰直方图最优) |
threshold + THRESH_TRIANGLE |
Triangle 自动阈值(单峰直方图) |
adaptiveThreshold |
自适应阈值,适合光照不均场景 |
2.4 边缘检测
| 函数 | 特点 |
|---|---|
Canny |
多级边缘检测,最常用,含非极大值抑制 |
Sobel |
一阶微分,可指定方向 (x/y) |
Scharr |
Sobel 的 3x3 |

156

被折叠的 条评论
为什么被折叠?



