import cv2
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png",cv2.IMREAD_GRAYSCALE)#原始图像
r=cv2.Canny(o,32,128)#Canny算子
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
算法:Canny算子是一种使用多级边缘检测算法检测边缘的方法。
Canny算子通过边缘差分算子(如Rober,Prewitt,Sobel)计算差分的水平方向的Gx和垂直方向的Gy,梯度的幅度G和方向θ(梯度的方向与边缘的方向垂直):
其中θ范围从弧度-π到π。
设梯度分为8个方向,分别为E、NE、N、NW、W、SW、S、SE,其中0代表00~45°,1代表450~90°,2代表-900~-45°,3代表-450~0°。像素点P的梯度方向为θ,则像素点P1和P2的梯度线性插值为:
edges = cv.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]])
注意:非极大值抑制寻找的像素点是局部最大值。图像的噪声会影响边缘检测的准确性,虚边缘可能是真实图像产生的,也可能是由于噪声所产生的。滤波器的核越大,边缘信息对于噪声的敏感度越低。核越大,边缘检测的定位错误也会随之增加。通常5×5的核满足大多数的情况。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!