OpenCV 2 学习笔记(24): 使用形态学滤波检测边缘与角点

本文介绍了使用OpenCV进行图像处理,通过形态学滤波检测边缘和角点的方法。通过对比腐蚀和膨胀操作后的图像差异找到边缘,并探讨不同结构元素对边缘厚度的影响。同时,文章详细解释了角点检测的过程,包括使用十字交叉和菱形结构元素进行膨胀和腐蚀操作,以突出角点。最后展示了边缘和角点检测的结果。

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

代码下载地址:http://download.youkuaiyun.com/detail/u010525655/6363381


在一幅灰度图像中,我们可以把亮的那一部分比作山,暗的那一部分比作山谷,而边缘就是山和山谷的相接的地方,这部分的灰度值会急剧的变化。如果在边缘地方使用腐蚀操作,那么和边缘交接的亮的地方就会被0所替代,也就山的一部分变成了山谷,那么山的高度就降低了。而膨胀的结果和这个相反。而水平地势的地方,也就是山顶的平地不会被影响到。

利用这个原理我们就可以找到图像的边缘。也就是找出腐蚀和膨胀后的图像的不同,结果就是边缘。很明显,如果我们使用的结构元素越大,那么得到的边缘就会越厚。由于我们是找出两张图片的不同,就不需要处理二值图像了。

同样的,拿腐蚀或者膨胀后的图像和原图像进行比较,也可以得到边缘,并且边缘更细一些。

在OpenCV中算子cv::morphologyEx(img, result, cv::MORPH_GRADIENT, cv::Mat()); 可以实现这个功能,函数名与开操作闭操作的相同,只是int op这个参数不同。

角点检测比边缘检测要复杂一些,他需要使用四个结构元素。这四个结构元素是我们自己定义的。首先我们先将图像使用两个不同的结构元素进行膨胀和腐蚀,结果就是,原有的图像平滑的边缘没有变化,而角点却显现出来,下面就是对一幅正方形白色图像爱说明一下,其中第一个是原图。

角点检测示例


需要使用到的结构元素

当我们用一个十字交叉(cross)的结构元素对图像进行膨胀操作时,只有角点的地方没有膨胀。然后我们再利用菱形(diamond)结构元素对其进行腐蚀操作,边缘的部分又回到了原来的位置,而角点却显现了出来。也可以使用x形状和正方形(square)形状的结构元素重复以上操作,可以看出这两个结构元素是对上面两个元素的旋转45度形成的,因此它们可以用来检测45度的角点。然后比较这两个结果的不同便可以得出我们想要的角点。


检测到的边缘


检测到的角点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值