OpenCV图像处理_边缘检测

OpenCV图像处理_边缘检测

1. 边缘检测
1.1 主要思想:标识数字图像中亮度变化明显的点;大幅度减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。
1.2 边缘检测分类
(1)基于搜索:通过寻找图像一阶导数中的最大值来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度模的最大值,代表算法是Sobel算子和Scharr算子
(2)基于零穿越:通过寻找图像的二阶导数零穿越来寻找边界,代表算法是Laplacian算子
2 .Sobel算子:基于搜索的方法获取边界
2.1 主要用途:用于对效率要求高,对细纹理不太关心的时候
2.2 方法
假设要处理的图像为I,在两个方向进行求导:
(1)水平变化:将图像I与奇数大小的模板进行卷积,结果为Gx,当模板大小为3时,Gx为:
在这里插入图片描述
(1)垂直变化:将图像I与奇数大小的模板进行卷积,结果为Gy,当模板大小为3时,Gy为:
在这里插入图片描述
注意:当内核大小为3时,以上Sobel内核可能会产生比较明显的误差,为解决这一问题,可以使用Scharr算子,但此函数仅作用于大小为3的内核
在这里插入图片描述
语法
Sobel_x_or_y=cv.Sobel(src,ddepth,dx,dy,dst,ksize,scale,delta,borderType)
参数
(1)src:传入的图像
(2)ddepth:图像的深度(cv.CV_16S)
(3)dx,dy:求导的阶数,取值为0(没有求导),1(1阶导)
(4)ksize:卷积核大小,必须为奇数,默认为3
(5)scale:缩放导数的比例常数,默认情况下无伸缩系数
(6)borderType:图像边界的模式
注意
(1)格式转换函数:Scale_abs=cv.convertScaleAbs(x)
(2)图像混合:result=cv.addWeighted(src1,alpha,src2,beta)
Sobel算子:
在这里插入图片描述
Scharr算子: (ksize:卷积核大小,为-1)
在这里插入图片描述
3. Laplacian算子:基于零穿越获取边界
主要思想:利用二阶导数来进行边缘检测
卷积核为:
在这里插入图片描述
语法:laplacion=cv.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])
参数
(1)src:需要处理的图像
(2)ddepth:图像的深度(cv.CV_16S)
(4)ksize:卷积核大小,必须为奇数,默认为3
在这里插入图片描述

4.Canny边缘检测算法
步骤
(1)噪声去除:高斯滤波
(2)计算图像梯度:sobel算子,计算梯度大小和方向
(3)非极大值抑制:利用梯度方向像素来判断当前像素是否为边界点
(4)滞后阈值:设置两个阈值,确定最终的边界
语法:canny=cv.Canny(image,threshold1,threshold2)
参数
(1)image:灰度图
(2)threshold1:较小的阈值将间断的边缘连接起来
(3)threshold2:较大的阈值检测图像中明显的边缘
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值