在机器视觉和图像处理领域,边缘检测(Edge Detection)是最基础、最重要的图像分析技术之一。无论是目标检测、轮廓提取、尺寸测量还是缺陷检测,很多算法都会先进行边缘检测,以突出图像中的结构信息。本文将介绍 OpenCV 中最经典的 Canny 边缘检测算法,并结合 Python 给出完整的代码示例。一、什么是边缘检测?边缘是指图像中灰度值发生明显变化的位置。例如,一张黑底白色矩形图片:□□□□□□□□□□□□ □□■■■■■■■■□□ □□■■■■■■■■□□ □□■■■■■■■■□□ □□□□□□□□□□□□经过边缘检测后,只会保留矩形边界:□□□□□□□□□□□□ □□████████□□ □□█□□□□□□█□□ □□████████□□ □□□□□□□□□□□□这样可以大幅减少数据量,同时保留目标最重要的几何特征。二、为什么需要边缘检测?边缘检测能够突出目标轮廓,在工业视觉中具有重要作用,例如:产品外形检测标签定位PCB 元器件检测缺陷检测尺寸测量OCR 字符定位轮廓分析很多视觉算法都是在边缘检测的基础上继续完成后续分析。三、Canny 边缘检测原理OpenCV 中最常使用的是 Canny 边缘检测算法。整个算法主要包括以下几个步骤:1、图像去噪首先使用高斯滤波去除噪声。原图 ↓ Gaussian Blur ↓ 平滑图像因为噪声容易被误认为边缘。2、计算图像梯度利用 Sobel 算子计算:X方向梯度Y方向梯度得到每个像素的梯度大小。梯度越大,说明灰度变化越剧烈。3、非极大值抑制保留真正的边缘。将较宽的边缘压缩成只有一个像素宽。这样得到更加清晰的边缘。4、双阈值检测设置两个阈值:高阈值低阈值梯度:大于高阈值 → 一定是边缘小于低阈值 → 一定不是边缘中间区域 → 根据连通性判断这种方式能够有效降低噪声干扰。四、OpenCV 边缘检测函数OpenCV 提供:edges=cv2.Canny(image,threshold1,threshold2)参数说明:参数说明image输入灰度图threshold1低阈值threshold2高阈值返回结果:一张二值图像:白色(255)表示边缘黑色(0)表示背景五、基础代码示例importcv2# 读取图片img=cv2.imread("test.png")# 转为灰度图gray=cv2.cvtColor(img,