import cv2
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png",cv2.IMREAD_GRAYSCALE)#原始图像
Sobelx=cv2.Sobel(o,cv2.CV_64F,1,0)#x轴方向的求导阶数
Sobely=cv2.Sobel(o,cv2.CV_64F,0,1)#y轴方向的求导阶数
Sobelx=cv2.convertScaleAbs(Sobelx)#x轴方向的计算结果取绝对值
Sobely=cv2.convertScaleAbs(Sobely)#y轴方向的计算结果取绝对值
Sobelxy=cv2.addWeighted(Sobelx,0.5,Sobely,0.5,0)#x轴方向和y轴方向的边缘叠加
Sobelxy11=cv2.Sobel(o,cv2.CV_64F,1,1)#当dx=1,dy=1时,Sobel运算
Sobelxy11=cv2.convertScaleAbs(Sobelxy11)#x轴方向和y轴方向的计算结果取绝对值
cv2.imshow("original",o)
cv2.imshow("xy",Sobelxy)
cv2.imshow("xy11",Sobelxy11)
cv2.waitKey()
cv2.destroyAllWindows()
算法:Sobel算子是离散的微分算子,结合了高斯平滑和微分求导运算,利用局部差分寻找边缘,计算所得的值是一个梯度的近似值。
水平边界:
P5x=(P3-P1)+2x(P6-P4)+(P9-P7)
垂直边界:
P5y=(P7-P1)+2x(P8-P2)+(P9-P3)
dst=cv2.Sobel( src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]] )
注意:ksize的值为-1时表示使用Scharr算子运算。如果处理的图像是8位图类型且ddepth参数值为-1时,那么所有负数会自动截断为0,发生信息丢失。为了避免信息丢失,在计算时要先使用更高的数据类型cv2.CV_64F,再通过取绝对值将其映射为cv2.CV_8U(8位图)类型。通常将函数cv2.Sobel()内参数ddepth的值设置为cv2.CV_64F。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!