图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。
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')