当前位置:首页 > SEO优化 > 正文

sobel算子,sobel算子,Opencv知识点-28-Sobel

sobel算子,sobel算子,Opencv知识点-28-Sobel

一、Sobel算子1、什么是sobel算子sobel主要是用于边缘检测的离散微分算子,结合了高斯平滑和微分求导,用来计算图像灰度的...

一、Sobel算子

1、什么是sobel算子

sobel主要是用于边缘检测的离散微分算子,结合了高斯平滑和微分求导,用来计算图像灰度的近似梯度。主要是用来产生一个梯度矢量的。

2、sobel算子的计算过程

即如何得出图像的梯度矢量

3、soble函数

void Sobel(InputArray src,OutputArray dst, int ddepth, int dx, int dy, int ksize = 3,double scale = 1,double delta = 0, int boederType = BORDER_DEFAULT);

ddepth 为输出图像深度,当然要根据输入图像深度来选择

若src.depth() = CV_8U,取ddepth = -1/CV_16S/CV_32F/CV_64F

若src.depth() = CV_16U/CV_16S,取ddepth = -1/CV_32F/CV_64F

若src.depth() = CV_32F,取ddepth = -1/CV_32F/CV_64F

若src.depth() = CV_64F,取ddepth = -1/CV_64F

dx 和dy分别表示x方向和y方向的差分阶数

ksize默认为3,表示sobel核的大小,必须取1,3,5,7

scale表示计算导数时可选的缩放因子,=1则表示没有缩放

delta为将结果存入目标矩阵之前的可选项

我们常用dx = 1,dy = 0,ksize = 3来基三x方向的导数,dx = 0,dy =1,ksize = 3来计算y方向的导数

int test18() {

Mat img = imread("C:Users86188Desktop526.jpg");

Mat grad_x,grad_y;

Mat abs_grad_x, abs_grad_y,dst;

Mat img_gray;

cvtColor(img, img_gray, COLOR_BGR2GRAY);

imshow("img", img);

imshow("img_gray", img_gray);

//求x方向梯度

Sobel(img, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT);

convertScaleAbs(grad_x, abs_grad_x);

imshow("x方向sobel", abs_grad_x);

//求y方向梯度

Sobel(img, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);

convertScaleAbs(grad_y, abs_grad_y);

imshow("y方向sobel", abs_grad_y);

//合并梯度

addWeighted(abs_grad_x,0.5, abs_grad_y,0.5, 0,dst);

imshow("dst sobel", dst);

waitKey(10000000);

return 0;

}

发表评论

推荐文章

  • sem开户(sem推广开户渠道)sem开户(sem推广开户渠道)
  • 炫酷花里胡哨倒计时引导页HTML源码炫酷花里胡哨倒计时引导页HTML源码
  • SEO网站推广怎么做(SEO网站推广的6个方法与技巧)SEO网站推广怎么做(SEO网站推广的6个方法与技巧)
  • 新文章