【金山文档 | WPS云文档】 OpenCV轮廓提取方法 https://www.kdocs.cn/l/cuM3UaHPg2cj
为什么要做轮廓提取?
在图像处理任务中,无论是:果实形状分析(如香榧横切面)、工业缺陷检测、医学图像分割、目标识别,“轮廓(Contour)”都是最基础但最关键的一步。
在OpenCV中,轮廓本质上可以理解为:连接图像中相同灰度/二值区域的边界点集合
OpenCV的轮廓提取是在“二值图像”中寻找白色目标的边界
基本规则:
- 前景(目标)= 白色(255)
- 背景 = 黑色(0)
所以第一步永远是:图像预处理 → 二值化
完整流程①图像预处理
常见操作:灰度化,高斯滤波(去噪),对比度增强
作用是降低噪声,提高边缘稳定性
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)②二值化处理
Otsu自动阈值
_, binary = cv2.threshold(blur, 0, 255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU)固定阈值
_, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY)把图像变成黑白结构图
③边缘/形态学优化
Canny边缘检测/形态学闭运算(填补断裂) 让轮廓更连续
kernel = np.ones((3,3), np.uint8)
binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)④提取轮廓
contours, hierarchy = cv2.findContours(
binary,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)