图像处理核心 20% — 先问”我要改像素还是改结构”

一句话:传统图像处理就五个动作——看颜色、去掉噪、突出边、连成块、换个位置。90% 的前处理需求,都是这五个动作的组合。


🎯 这 20% 能解决哪些问题

常见困惑本质本页答案
为什么灰度图能做人脸检测,彩色反而不行色彩空间与通道冗余见「色彩空间怎么选」
边缘检测结果全是噪点未先做平滑见「边缘检测的先后顺序」
二值化后字符断成一节一节阈值与形态学没配合见「形态学:腐蚀与膨胀」
图片缩放后文字糊成一团插值方法选错见「几何变换与插值」
想用传统方法做缺陷检测,从哪下手需要一条固定流水线见「工业检测流水线」

一、色彩空间怎么选

空间通道适合不适合
BGR/RGB蓝绿红显示、简单阈值光照变化
灰度亮度边缘、模板匹配依赖颜色的区分
HSV色相/饱和度/明度颜色分割(唯一推荐)直接做卷积
Lab亮度 + 两轴色度色差计算(ΔE)直观调参

关键直觉:在 HSV 里做”找红色”,只需对 H 通道设区间,不受亮度影响;在 RGB 里同一件事要写三个通道的复杂条件。


二、滤波:先决定”保边还是去掉”

滤波作用代价
均值/高斯平滑高斯噪声边缘模糊
中值去椒盐噪声(最有效)慢,细线可能被吃掉
双边保边平滑慢
非局部均值强去噪很慢

顺序铁律:先去噪,再求梯度。直接对噪声图做 Sobel,得到的全是噪声的梯度。


三、边缘检测的先后顺序

graph LR
    A["灰度化"] --> B["高斯平滑"]
    B --> C["梯度<br/>Sobel"]
    C --> D["非极大值抑制"]
    D --> E["双阈值滞后<br/>Canny"]
方法特点场景
Sobel / Scharr简单,给出方向快速粗筛
Laplacian对噪声敏感需先强平滑
Canny单像素宽边缘,需两个阈值默认首选
霍夫变换检测直线/圆车道线、表格框

Canny 双阈值调参:低阈值 = 高阈值 × 0.4 是常用起点。低阈值过高 → 边缘断裂;过低 → 噪点增多。


四、形态学:腐蚀与膨胀

操作效果用途
腐蚀前景缩小去小噪点、断开粘连
膨胀前景扩大填补空洞、连接断裂
开运算(先腐后膨)去小噪点保留大块最常用的清理
闭运算(先膨后腐)填小孔、连断裂文字/条码修复

结构元(kernel)的选择:文字用 3×3 或 (1×3),粘连分离用较大的椭圆核。核越大,形态越”钝”。


五、几何变换与插值

操作矩阵要素注意
缩放缩放因子缩小用 INTER_AREA,放大用 INTER_CUBIC
旋转旋转矩阵 + 中心先算新画布尺寸,避免裁掉四角
仿射3 点对应保留平行性
透视4 点对应文档矫正、车牌矫正

插值口诀:缩小用面积插值(避免摩尔纹),放大用三次插值(更平滑),掩膜与标签图一律用最近邻(禁止插值出中间值)。


六、工业检测流水线

步骤动作目的
1定位 ROI(模板匹配/轮廓)消除位置偏移
2光照归一化(CLAHE)抗光照波动
3去噪(中值/双边)稳定后续阈值
4分割(自适应阈值/HSV)得到候选区域
5形态学清理去掉碎块
6特征判定(面积/长宽比/圆度)规则化判别
7输出坐标与判定与 PLC/MES 对接

务实建议:传统方法在稳定光照 + 单品类场景仍然是最优解,成本与可解释性远胜训练模型;但光照一变就要重调参数,这是它的天花板。


七、OpenCV 二十个必会操作

#操作函数
1–3读/显示/写imread imshow imwrite
4转灰度cvtColor
5缩放resize
6裁剪数组切片
7旋转/仿射warpAffine
8透视变换warpPerspective
9高斯模糊GaussianBlur
10中值滤波medianBlur
11双边滤波bilateralFilter
12全局阈值threshold
13自适应阈值adaptiveThreshold
14Otsuthreshold(..., THRESH_OTSU)
15边缘Canny
16形态学morphologyEx
17轮廓findContours / drawContours
18直方图均衡equalizeHist / createCLAHE
19模板匹配matchTemplate
20形态学距离/连通域connectedComponentsWithStats

📋 一页速查

问题答案
颜色分割用什么空间HSV
椒盐噪声用什么中值滤波
边缘检测前必做什么高斯平滑
去小噪点用什么开运算
缩小图片用什么插值INTER_AREA
标签图缩放用什么最近邻

🔗 相关链接

主题链接
计算机视觉概览计算机视觉
目标检测目标检测核心 20%
图像生成图像生成核心 20%
视频分析视频分析核心 20%
深度学习深度学习