opencv+python入门之七(边缘提取之sobel、scharr、laplacian、canny算子等)

本文介绍了使用OpenCV和Python进行边缘检测,包括Sobel算子的x、y方向梯度计算,Scharr算子的增强效果,拉普拉斯算子的边缘检测原理,以及Canny边缘提取的四步流程。通过调用相应函数如cv2.sobel()、cv2.Scharr()、cv2.Laplacian()和cv2.canny(),可以实现不同算子的边缘检测。实验结果显示,结合使用这些方法能提高边缘检测效果。
摘要由CSDN通过智能技术生成

1.sobel算子

sobel算子的原理便是求出x,y方向的梯度。梯度的计算方法如下:

G{x}=\begin{bmatrix} -1\ 0\1 \\ -2\ 0 \2\\ -1\0\ 1 \end{bmatrix}*\begin{bmatrix} P1 \ P2 \ P3 \\ P4\ P5\ P6 \\ P7\ P8\ P9 \end{bmatrix}可以得到元素P5在x方向的梯度为P3-P1+2*(P6-P4)+P9-P7。

G{y}=\begin{bmatrix} -1 \ -2 \ -1 \\ 0 \ 0 \ 0\\ 1 \ 2 \ 1 \end{bmatrix}*\begin{bmatrix} P1 \ P2 \ P3 \\ P4\ P5\ P6 \\ P7\ P8\ P9 \end{bmatrix}可以得到元素P5在y方向的梯度为P3-P1+2*(P6-P4)+P9-P7。

然后将Gx和Gy取绝对值相加,根据差值的大小来判断是否为边界。(注意这里要取绝对值,不然可能会丢失一些信息)

sobel算子检测边缘通过cv2.sobel(src,ddepth,dx.dy[,ksize])函数来实现。其中ddepth指的是处理图象的深度,等于1时表示与原图像相同的深度,但是要注意的是如果原图像为uint8类型的,需要转换成有符号的,例如cv2.CV_16S和cv2.CV_64F保留负数部分。当dx =0,dy=1时,求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值