Python+OpenCV图像处理—— 边缘检测之 Canny算子
OpenCV边缘检测的一般步骤为:
滤波
增强
检测
常用的边缘检测的算子和滤波器有:
Sobel算子
Laplacian算子
Canny算子
Scharr滤波器
Canny算子
Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
好的检测- 算法能够尽可能多地标识出图像中的实际边缘。
好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。
最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
算法步骤:
①高斯模糊 - GaussianBlur
②灰度转换 - cvtColor
③计算梯度 – Sobel/Scharr
④非最大信号抑制
⑤高低阈值输出二值图像
代码如下:
#Canny边缘提取
import cv2 as cv
def Canny_imag(image):
blur= cv.GaussianBlur(image, (3, 3), 0)
M = cv.cvtColor(blur, cv.COLOR_RGB2GRAY)
# x = cv.Sobel(gray, cv.CV_16SC1, 1, 0) #x方向梯度
# y = cv.Sobel(gray, cv.CV_16SC1, 0, 1) #y方向梯度
# edge_output = cv.Canny(x, y, 50, 150)
a = cv.Canny(M, 50, 150)
cv.i