图像梯度计算

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()
View Code

结果如下:

 

 

 

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()
View Code

 

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()
View Code

 

posted @ 2021-09-13 19:39  Ocean允许访问  阅读(44)  评论(0)    收藏  举报