python CV学习6:边缘检测

本文介绍了图像处理中的边缘检测技术,包括边缘的概念、检测方法及其实现步骤。详细讲解了Sobel算子和Canny算法的工作原理,并通过示例代码展示了这两种方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 什么是边缘?

边缘是图像强度函数快速变化的地方

2 如何检测边缘?

为了检测边缘,我们需要检测图像中的不连续性,可以使用导数来检测不连续性。

3 图像梯度

 梯度就是X方向的箭头和Y方向的箭头的和。假设某一点上,x的偏导数为3,y的偏导数为-1,则该点的梯度就是(3,-1)

 4 Sobel算子

x和y方向的Sobel算子分别为:

 拿下图举例

img=cv2.imread('src/noise0.jpg',cv2.IMREAD_GRAYSCALE)


sobel_x1=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobel_x2=cv2.convertScaleAbs(sobel_x1)

sobel_y1=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobel_y2=cv2.convertScaleAbs(sobel_y1)

sobel_xy1=cv2.addWeighted(sobel_x2,0.5,sobel_y2,0.5,0)
sobel_xy2=cv2.convertScaleAbs(sobel_xy1)

cv2.imshow('origin',img) 

cv2.imshow('sobel_x',sobel_x1)    
cv2.imshow('sobel_x & ScaleAbs',sobel_x2) 

cv2.imshow('sobel_y',sobel_y1)  
cv2.imshow('sobel_y & ScaleAbs',sobel_y2)    

cv2.imshow('sobel_xy',sobel_xy1) 
cv2.imshow('sobel_xy & ScaleAbs',sobel_xy2) 

cv2.waitKey(0)        
cv2.destroyAllWindows()

 

5 Canny边缘检测

在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。

完成一个Canny边缘检测算法可以分为以下四步:

高斯滤波目的
1.高斯滤波去噪声降低错误率
2.计算梯度幅值和方向估计每一点处的边缘强度与方向
3.非极大值抑制(NMS)对Sobel、Prewitt等算子的结果进一步细化
4应用双阈值(Double-Threshold)检测确定真实的和可能的边缘。

 还是使用上图

img = cv2.imread("src/noise0.jpg", 0)  # 由于Canny只能处理灰度图,所以将读取的图像转成灰度图
 
img1 = cv2.GaussianBlur(img,(3,3),0) # 用高斯平滑处理原图像降噪。若效果不好可调节高斯核大小
 
canny = cv2.Canny(img1, 80, 100)     # 调用Canny函数,指定最大和最小阈值,其中apertureSize默认为3。
 
cv2.imshow('Canny', canny)
 
cv2.waitKey(0)
 
cv2.destroyAllWindows()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值