一、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
留言与评论(共有 0 条评论) |