图像梯度计算
Sobel算子
1 import cv2 2 3 ''' 4 dst = cv2.Sobel(src, ddepth, dx, dy, ksize) 5 ddepth:图像的深度,一般取-1。 6 dx和dy分别表示水平和竖直方向 7 ksize是Sobel算子的大小 8 ''' 9 10 img = cv2.imread('default.png', cv2.IMREAD_GRAYSCALE) 11 # 沿着水平方向进行下一梯度的提取 12 sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) 13 # 白->黑是正数,黑->白是负数,所有负数会被截断成0,应该要取绝对值 14 sobelx = cv2.convertScaleAbs(sobelx) 15 cv2.imshow('sobelx', sobelx) 16 17 sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) 18 sobely = cv2.convertScaleAbs(sobely) 19 cv2.imshow('sobely', sobely) 20 21 # 利用水平和竖直方向梯度提取, 不建议直接计算 22 sobelsum = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0) 23 cv2.imshow('sobelsum', sobelsum) 24 25 cv2.waitKey(0) 26 cv2.destroyAllWindows()
结果如下:
Scharr算子
1 import cv2 2 3 img = cv2.imread('default.png', cv2.IMREAD_GRAYSCALE) 4 scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0) 5 scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1) 6 scharrx = cv2.convertScaleAbs(scharrx) 7 scharry = cv2.convertScaleAbs(scharry) 8 scharrsum = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0) 9 10 cv2.imshow('scharrsum', scharrsum) 11 cv2.waitKey(0) 12 cv2.destroyAllWindows()
Laplacian算子
1 import cv2 2 3 img = cv2.imread('default.png', cv2.IMREAD_GRAYSCALE) 4 laplacian = cv2.Laplacian(img, cv2.CV_64F) 5 laplacian = cv2.convertScaleAbs(laplacian) 6 cv2.imshow('laplacian', laplacian) 7 cv2.waitKey(0) 8 cv2.destroyAllWindows()

浙公网安备 33010602011771号