相关链接:
Scharr 算子
- Scharr 算子 和 Sobel算子
Scharr 算子相对Sobel算子而言,具有更高的精度
- Scharr 算子函数原型:
dst_img = cv2.Scharr(src_img, ddepth, dx, dy, scale, delta)
参数:
- dst_img:结果图像
- src_img:原始图像
- ddepth:输出图像的深度,
- dx:x方向上的求导阶数,值为0时,表示在该方向上没有求导
- dy:y方向上的求导阶数,值为0时,表示在该方向上没有求导
- scale:代表计算导数值时的缩放因子。默认值是1,表示没有缩放。
- delta:代表加到目标图像上的亮度值。默认值是0。
-
函数cv2.Sobel() 的参数ksize=-1时,会使用Scharr滤波器。所以,dst = cv2.Sobel(src_img, depth, fx, fy, -1)和dst = cv2.Scharr(src_img, depth, fx, fy)是等价的
-
与函数cv2.Sobel() 不同的是,不能同时设置dx=1,dy=1。 否则会报错
-
举例:
import cv2
import numpy as np
src_img = cv2.imread("/Users/manmi/Desktop/lena.bmp", 0)
sobel_x = cv2.Sobel(src_img, cv2.CV_64F, 1, 0, ksize=3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.Sobel(src_img, cv2.CV_64F, 0, 1, ksize=3)
sobel_y = cv2.convertScaleAbs(sobel_y)
sobel_xy = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
scharr_x = cv2.Scharr(src_img, cv2.CV_64F, 1, 0)
scharr_x = cv2.convertScaleAbs(scharr_x)
scharr_y = cv2.Scharr(src_img, cv2.CV_64F, 0, 1)
scharr_y = cv2.convertScaleAbs(scharr_y)
scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0)
cv2.imshow('sobel_xy', sobel_xy)
cv2.imshow('scharr_xy', scharr_xy)
cv2.waitKey()
cv2.destroyAllWindows()
输出为: