c 语言编腐蚀膨胀程序,OpenCV基础(七)---形态学基础:腐蚀与膨胀

形态学图像处理

形态学是研究动植物形态(form)的科学。这里我们使用同一术语表示数学形态学的内容。

数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,

是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、

骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等

预备知识

对一副二值图像进行形态学处理,首先要定义结构元(SE),结构元的形状通常为矩形和圆形。

如图1,阴影部分为结构元B,白色部分是添加的最小可能的背景元素以构成矩形。

对图2,图像A进行一种形态学处理得到图3.

处理方法:结构元B在集合A上进行移动,若阴影部分完全重合,此时结构元的中心点,在新图像上标记为阴影.

可以看到,在边缘处,B不能完全包含在A中,最终边界被腐蚀掉了.

PS:灰度图像与此类似,定义方法不同

4561b7e6a12b561e7be238509f35ad1c.png    

3f3285745b510613153dbc5671dbea06.png     

7de263fc9deece0e438ea28d328f7998.png

图1 结构元                          图2 处理前                                                       图3  处理后

膨胀

集合A和集合B,A⊕B表示为B对A的膨胀,定义为,

816851aacea5c1e26f8f098aac631b3d.png

这个公式,以B关于它原点的映像,并且以z对映像进行平移,B对A的膨胀是所有位移z的集合.

灰度形态学是二值形态学的扩展,研究对象是

灰度图像。在灰度形态学中,膨胀与腐蚀运算相当

于求局部最大值和最小值操作。膨胀与腐蚀运算

是其他形态学操作的基础,可利用灰度形态学膨胀

与腐蚀组成的形态学变换对灰度图进行滤波、边缘

检测、分割、纹理分析等。

灰度图的膨胀:

膨胀的目的是求局部最大值,即计算结构元素

在图像中所覆盖区域的像素点最大值,并把这个最大值赋给当前结构元素中心指定的像素.

腐蚀

集合A和集合B,A㊀B表示为B对A的腐蚀,定义为,

a068e29ca8b1d2cb7c3bbbc815731464.png

该式指出B对A的腐蚀是一个用z平移的B包含在A中所有的点z的集合.

灰度图的腐蚀:

腐蚀是膨胀的对偶操作,计算图像中被结构元素覆盖区域的最小像素值,

并把当前结构元素中心所在的像素置为最小值

函数介绍

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));

函数功能:返回指定形状和大小的结构元

函数声明:

shape  结构元的形状,可以为cv::MorphShapes中的一种

ksize  结构元的尺寸

anchor  锚点默认为结构元中心,一般取默认

voiddilate( InputArray src, OutputArray dst, InputArray kernel,

Point anchor= Point(-1,-1), int iterations = 1,int borderType =BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );

函数功能:膨胀图像

参数声明略

voiderode( InputArray src, OutputArray dst, InputArray kernel,

Point anchor= Point(-1,-1), int iterations = 1,int borderType =BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );

函数功能:腐蚀图像

参数声明略

代码

1 #include

2 #include

3 using namespacecv;4 using namespacestd;5 Mat src, dst;6 char output_title[] = "dilate image";7 int element_size = 3;8 int max_size = 21;9 void CallBack_Demo(int, void*);10 intmain() {11

12 src = imread("D:/cat.png");13 if (!src.data) {14 cout << "could not load image..." <

19 namedWindow(output_title, CV_WINDOW_AUTOSIZE);20 createTrackbar("Element Size :", output_title, &element_size, max_size, CallBack_Demo);21 CallBack_Demo(0, 0);22

23 waitKey(0);24 return 0;25 }26

27 void CallBack_Demo(int, void*) {28 int s = element_size * 2 + 1;29 Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));30 dilate(src, dst, structureElement, Point(-1, -1), 1);31 //erode(src, dst, structureElement, Point(-1, -1), 1);

32 imshow(output_title, dst);33 return;34 }

效果对比图

4a9d8d96f7449d273e273f31242b1922.png

90ff32ce06a005ec564c7e0e391c3f8e.png  

62bf759a2ff4f8f004782b3a10aa66fc.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值