基于opencv边缘检测算子有很多,比如Canny算子,Robert算子,Sobel算子,Laplacian算子,Prewitt算子,Krisch算子和Scharr滤波器等
接下来要介绍的是Sobel算子:
Sobel算子
索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。
Sobel算子参数:
Sobel(inputArray,OutputArray,int ddepth,int dx,int dy,int ksize=3,double scale=(1.0),double delta=(0.0),int borderType=4)
第一个参数:输入函数
第二个函数:输出函数
第三个参数(int ddepth),int类型的ddepth,输出图像的深度。
【图片来源百度】
图片深度类型:
在Sobel算子中支持如下src.depth()和ddepth的组合:
1、若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
2、若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
3、若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
4、若src.depth() = CV_64F, 取ddepth = -1/CV_64F
第四个参数,int类型dx_order,x 方向上的差分阶数。
第五个参数,int类型dy_order,y方向上的差分阶数。
(由于Sobel 算子结合了 Gaussian 平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。通常情况,函数调用采用如下参数 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 来计算一阶 x- 或 y- 方向的图像差分)
第六个参数,int类型ksize,有默认值3,表示Sobel核的大小;必须取1,3,5或7。
第七个参数,double类型的scale,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。
第八个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
第九个参数, int类型的borderType,边界模式,默认值为BORDER_DEFAULT。
原图:
Sobel算法结果:
X方向Sobel
Y方向Sobel:
整体方向Sobel: