星海湾科技
计算机视觉图像识别7.1-Sobel算子
来源:网络 | 作者:佚名 | 发布时间: 2025-03-18 | 709 次浏览 | 分享到:

图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。


sobel算子,主要用作边缘检测,是离散差分算子,用来运算图像梯度函数的灰度近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或者法矢量。

img = cv2.imread('pie.png',cv2.GRAYSCALE) cv2.imshow("img",img) cv2.waitKey() cv2.destroyAllWindows()

dst = cv2.Sobel(src,ddepth,dx,dy,ksize)


ddepth为图像的深度;


dx和dy分别表示水平和竖直方向;


ksize是指Sobel算子的大小。

def cv_show(img,name): cv2.imshow(name,img)  cv2.waitKey()  cv2.destroyAllWindows() sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) cv2_show(sobelx,'sobelx')

从白到黑是正数,从黑到白是负数,所有负数会被截断成0,所以要取绝对值。

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) sobelx = cv2.convertScaleAbs(sobelx) cv_show(sobelx,'sobelx') #dx改为0,dy改为1 sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3) sobely = cv2.convertScaleAbs(sobely) cv_show(sobely,'sobely')

分别计算x和y,然后求和。

sobelxy = cv2.addWeighter(sobelx,0.5,sobely,0.5,0) cv_show(sobelxy,'sobelxy')