opencv 字符图象 开运算 闭运算_【图像处理】OpenCV系列九 --- 形态学处理

上一节我们学习了形态学的基本操作,即图像的腐蚀与膨胀,那么,本节我们一起来学习更高级的形态学操作。

一、形态学操作 --- 开运算

开运算(Opening Operation),其实就是先腐蚀后膨胀的过程。

其数学表达式如下:

8faa07ad807a2004f0727c536bff02d1.png

开运算表达式

实例:

30b36550a62fd45916b287f451c46d79.png
69ef2bf525edf59313941a97ec5183ba.png

实验结果:

f5f10b9966ddda316243a26fe0d738d7.png

开操作原图(左)与效果图(右)

2 、形态学操作 --- 闭运算

先膨胀后腐蚀的过程称为闭运算(Closing Operation)。

其数学表达式如下:

f93e25c25c8bdfba6c552835ff6e7b0c.png

闭运算表达式

实例:

9819b0cb4c5f9d01ff637e8b9f3f3269.png
8baff8523f9e642938d7469264c47609.png

实验结果:

b03e59666ee2a4176b6b170067198391.png

闭运算原图(左)与效果图(右)

三、形态学梯度

形态学梯度(Morphological Gradient)为膨胀图与腐蚀图之差。

数学表达式如下:

cd78b0dfbacb05b596fc87c48842c62a.png

形态学梯度

对二值图像进行这一操作可以将团块(blob)的边缘突出出来,我们可以用形态学梯度来保留物体的边缘轮廓。

函数原型:

3ccec48ae6b020a4ab4bc1dabfbd2ded.png

函数功能:

morphologyEx函数利用基本的膨胀和腐蚀技术,来执行更加高级形态学变换,如开闭运算,形态学梯度,“顶帽”、“黑帽”等等。

参数详解:

  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可,图像位深应该为以下五种之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F;
  • 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型;
  • 第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:
  • MORPH_OPEN – 开运算(Opening operation)
  • MORPH_CLOSE – 闭运算(Closing operation)
  • MORPH_GRADIENT -形态学梯度(Morphological gradient)
  • MORPH_TOPHAT - “顶帽”(“Top hat”)
  • MORPH_BLACKHAT - “黑帽”(“Black hat“)
  • 第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵);
  • 第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心;
  • 第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1;
  • 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT;
  • 第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。

实例:

00cadf8a2caed901a5eea1f0f827b48a.png
f3237bed18d74c6c993aa22af475116e.png

实验结果:

40dfa81af0527d306e7d79da6966b4cb.png

形态学梯度原图(左)与效果图(右)

四、形态学操作 --- 顶帽

顶帽运算(Top Hat)又常常被译为”礼帽“运算。为原图像与上文刚刚介绍的“开运算“的结果图之差,数学表达式如下:

61ae6ad184aa75368fa78b60c410fad4.png

顶帽

因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。

顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

实例--核心代码:

00c6ded212b3aa02d9c3caaeb17952ca.png

实验结果:

e50a96d1d11caec95082356db972ce97.png

顶帽原图(左)与效果图(右)

五、形态学操作 --- 黑帽

黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差。数学表达式为:

ed21c8156e9148e95733b972d866aba6.png

黑帽

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。

所以,黑帽运算用来分离比邻近点暗一些的斑块。

实例 - 核心代码:

37ce785156ddd8154e3c518f4424ba06.png

实验结果:

e098c9fe7bb9c0f655c2b8915572de7b.png

黑帽原图(左)与效果图(右)

六、综合实例

aa4b76b99657f0806ec2886b31812367.png
404a0b9aa43e870e2f8db2324415d942.png
167d9a8e15d4603090ef2cd72d51138d.png
cba1a476b06fc7a0d47c3418d511137f.png
1b028532770dc8a26818a9b83545d664.png
199e7aa9c60c2c2ff88edd96f6d24a88.png
717f26a5bdb53dd725586df32e234fb6.png
630081f189d7b2543c041e6dd6d77756.png
4a59abd4b36edb1c089baa005559316c.png
535d9ec51386ad633b4a3c76aab0050a.png
67c8b13272047198fe2787fba6cc871d.png
565e6dc313ed2b40dc646e8e53510d88.png

实验结果:

7058e785b1fa0808654e46495acc8716.png

综合实例

好了,今天OpenCV形态学学习到这里就结束了,喜欢的朋友可以给我点个赞!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值