sobel算子(sobel算子边缘检测)

更新时间:2023-03-02 08:27:31 阅读: 评论:0

一、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:\Urs\86188\Desktop\526.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;

}

本文发布于:2023-02-28 21:01:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167771685196630.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:sobel算子(sobel算子边缘检测).doc

本文 PDF 下载地址:sobel算子(sobel算子边缘检测).pdf

标签:算子   边缘   sobel
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|