- OpenCV 提供了多种图像分割方法,适用于不同的场景和需求。
以下是常见方法的总结:
1. 基于阈值的分割
-
原理:根据像素强度将图像分为前景和背景。
- 全局阈值:固定阈值(如 cv2.threshold)。
- 自适应阈值:局部动态调整(cv2.adaptiveThreshold)。
- Otsu 算法:自动选择最佳阈值(cv2.THRESH_OTSU)。
适用场景:光照均匀、背景对比度高的图像(如文档二值化)。
2. 边缘检测分割
-
原理:通过检测物体边缘提取轮廓。
- Canny 边缘检测(cv2.Canny):结合高斯滤波和非极大值抑制。
- Sobel/Laplacian 算子:检测梯度变化。
适用场景:物体轮廓清晰的图像(如工业零件检测)。
3. 基于颜色空间的分割
-
原理:在 HSV/LAB 等颜色空间中分离特定颜色范围。
- HSV 阈值(cv2.cvtColor + cv2.inRange)。
- 直方图反向投影(cv2.calcBackProject)。
适用场景:颜色差异明显的物体(如交通标志识别)。
4. 区域生长与分水岭算法
区域生长:手动设定种子点,合并相似像素(需自定义实现)。
分水岭算法(cv2.watershed):基于标记的分割,处理粘连物体。
适用场景:医学图像分割、重叠物体分离。
5. 聚类分割
K-means 聚类(cv2.kmeans):按颜色/纹理聚类像素。
均值漂移(cv2.pyrMeanShiftFiltering):基于颜色和空间平滑。
适用场景:颜色分布复杂的图像(如自然场景分割)。
6. 图割与交互式分割
GrabCut(cv2.grabCut):用户提供矩形或掩码,迭代优化分割。
适用场景:需要精确交互的分割(如人像抠图)。
7. 连通区域分析
连通组件标记(cv2.connectedComponents):标记独立连通区域。
轮廓分析(cv2.findContours):提取并筛选轮廓。
适用场景:物体计数或形状分析(如细胞计数)。
8. 形态学分割
腐蚀/膨胀(cv2.erode/cv2.dilate):结合形态学操作分离物体。
开运算/闭运算:去噪或填充空洞。
适用场景:预处理或后处理(如去除小噪声)。
9. 背景减除
-
原理:分离动态前景与静态背景(视频流处理)。
- MOG2/KNN(cv2.createBackgroundSubtractorMOG2/KNN)。
适用场景:视频监控、运动检测。
10. 深度学习分割
集成模型:通过 cv2.dnn 加载预训练模型(如 UNet、Mask R-CNN)。
框架支持:需配合 TensorFlow/PyTorch 模型使用。
适用场景:复杂场景的像素级分割(如自动驾驶)
二、选择方法的关键点
图像特性:颜色、纹理、对比度。
交互需求:全自动(如阈值) vs. 半自动(如 GrabCut)。
计算效率:传统方法实时性高,深度学习精度更高但资源消耗大。
建议结合多种方法(如先阈值分割再形态学优化)以达到最佳效果。