scharr算子实际上是sobel算子的优化,scharr算子在处理边缘时比sobel精度高一些。两种算子唯一的区别就是他们的卷积核不同,他们无论在计算时间还是复杂度都是一样的。
容易看出两种算子卷积核的差异。
opencv中提供给我们scharr算子的函数:
cv2.Scharr(src,ddepth,dx,dy)
参数解释同sobel,不清楚的请移步OpenCV之sobel算子详解
但是我们既然说scharr算子是sobel算子的优化,我们当然也可以通过sobel算子实现scharr算子的功能,只需
cv2.Sobel(src,ddepth,dx,dy,-1)
把sobel函数第五个参数改为-1即可变为scharr算子。
例子
待处理图片
sobel算子:
scharr算子:
区别很明显,scharr算子明显在细节处理要好于sobel算子