© Fu Xianjun. All Rights Reserved.
一、Sobel算子
Sobel 算子是一种离散的微分算子,该算子结合了高斯平滑和微分求导运算。该算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。
语法形式: dst=cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType] ] ] ])
- dx代表x方向上的求导阶数。
- dy代表y方向上的求导阶数。
- ksize代表Sobel核的大小。该值为-1时,则会使用Scharr算子进行运算
- scale代表计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。
- delta代表加在目标图像dst上的值,该值是可选的,默认为0。
- ddepth代表输出图像的深度。
ddepth值:
输入图像的深度(src.depth) | 输出图像深度(ddepth) |
---|---|
cv2.CV_8U | -1/cv2.CV_16S/cv2.CV32F/cv2.CV_64F |
cv2.CV_16U/cv2.CV_16S | -1/cv2.CV32F/cv2.CV_64F |
cv2.CV_32F | -1/cv2.CV32F/cv2.CV_64F |
cv2.CV_64F | -1/cv2.CV_64F |
- 通常要将函数cv2.Sobel()内参数ddepth的值设置为“cv2.CV_64F”
1、方向
dst=cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType] ] ] ])
dx代表x方向上的求导阶数 ; dy代表y方向上的求导阶数。
- 计算x方向边缘(梯度):dx=1,dy=0 语法为:dst=cv2.Sobel(src ,ddepth ,1 ,0)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
cv_show("sobelx",sobelx
- 计算y方向边缘(梯度):dx=0,dy=1 语法为:dst=cv2.Sobel(src ,ddepth ,0 ,1)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)
cv_show("sobely"