一般称scharr为滤波器,而不是算子。主要配合Sobel算子的运算而存在。
void Scharr( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT );
它的参数与Sobel基本上一致。
void Sobel( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, int ksize = 3,
double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT );
src | 输入图像 |
dst | 目标图像 |
ddepth | 输出图像的深度 |
dx | x方向上的差分阶数 |
dy | y方向上的差分阶数 |
scale | 可缩放因子 |
delta | 可选值 默认0 |
borderType | 边界模式 |
所以:下面是等价的
Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType)
sobel(src,dst,ddepth,dx,dy,CV_SCHARR,scale,delta,borderType)
#include
#include
using namespace cv;
int main()
{
Mat dst;
Mat grad_x, grad_y,grad_x_abs, grad_y_abs;
Mat src = imread("F:/3.jpg");
imshow("src", src);
Scharr(src, grad_x, CV_16S, 1, 0, 1, 0);
convertScaleAbs(grad_x, grad_x_abs);
imshow("x_grad", grad_x_abs);
Scharr(src, grad_y, CV_16S, 0,1, 1, 0);
convertScaleAbs(grad_y, grad_y_abs);
imshow("y_grad", grad_y_abs);
addWeighted(grad_x_abs, 0.5, grad_y_abs, 0.5, 0, dst);
imshow("zhengti", dst);
waitKey(0);
return 0;
}