OpenCV图像处理教程C++(十一) 形态学操作--膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽

本文介绍了OpenCV中形态学操作的概念,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽和黑帽。这些操作在图像处理中用于消除噪声、分割图像元素、填充小孔洞以及突出边缘等。文中通过代码示例展示了如何使用OpenCV进行这些操作,并解释了每种操作的效果和应用场景。
摘要由CSDN通过智能技术生成

形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种,他们是:膨胀与腐蚀(Dilation与Erosion)

膨胀:此操作将图像(A)与任意形状的内核 (B),通常为正方形或圆形,进行卷积。内核 B 有一个可定义的 锚点, 通常定义为内核中心点。进行膨胀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最大相素值提取,并代替锚点位置的相素。显然,这一最大化操作将会导致图像中的亮区开始”扩展” (因此有了术语膨胀 dilation )。这种操作会造成图像中像素值高的区域变大,而像素值小的区域变小。(感官上图像变细,变白了)

腐蚀:跟膨胀操作造作的效果刚好相反。腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。它提取的是内核覆盖下的相素最小值。进行腐蚀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最小相素值提取,并代替锚点位置的相素。以与膨胀相同的图像作为样本,我们使用腐蚀操作。从下面的结果图我们看到亮区变细,而黑色区域则变大了。(感官上图像变粗,变黑了)

膨胀与腐蚀能实现多种多样的功能,主要如下:

  • 消除噪声
  • 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。
  • 寻找图像中的明显的极大值区域或极小值区域
  • 列表内容
  • 求出图像的梯度

形态学膨胀——dilate函数

void dilate(
    InputArray src,//输入图像,即源图像,填Mat类的对象即可。
    OutputArray dst,//即目标图像,需要和源图片有一样的尺寸和类型
    InputArray kernel,//膨胀操作的核。若为NULL时,表示的是使用参考点位于中心3x3的核
    Point anchor=Point(-1,-1),//锚的位置,其有默认值(-1,-1),表示锚位于中心。
    int iterations=1,//迭代使用erode()函数的次数,默认值为1
    int borderType=BORDER_CONSTANT,//用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT
    const Scalar& borderValue=morphologyDefaultBorderValue() //一般我们不用去管他
);
getStructuringElement(
//第一个参数表示内核的形状,矩形: MORPH_RECT,交叉形: MORPH_CROSS,椭圆形: MORPH_ELLIPSE
//第二和第三个参数分别是内核的尺寸以及锚点的位置,有默认值Point(-1,-1),表示锚点位于中心
)
形态学腐蚀——erode函数

void erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue()
 );

代码:

#include <opencv2/opencv.hpp>
#include<iostream>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值