形态学 - 开运算和闭运算

目录

1. 介绍

2. 代码实现 

2.1 开运算

2.2 闭运算


1. 介绍

膨胀和腐蚀操作都会有一个通病,就是会改变原目标的大小

开运算:先对目标腐蚀在膨胀

开运算能够平滑物体的轮廓、断开狭窄的狭颈、消除细长的突出物等等

形态学 - 开运算和闭运算_第1张图片

开运算的一些理解:先腐蚀在膨胀,可以保证目标大致的形状不变

  • 改变的部分,是由于腐蚀操作可能会让某些目标消失,这样该目标就不能通过膨胀还原
  • 所以开运算后的图像是 原图的子集
  • 根据几何解释,所以对同一幅图像重复开运算结果是相同的

闭运算:先膨胀在腐蚀

闭运算能够弥合狭窄的断裂和细长的沟壑、消除小孔、填补轮廓中的缝隙等等

形态学 - 开运算和闭运算_第2张图片

 闭运算:先膨胀在腐蚀

  • 原图 是 闭运算图像后的子集
  • 根据几何解释,所以对同一幅图像重复闭运算结果是相同的
  • 增加的部分,是由于膨胀操作可能会让目标之间产生连接,这样该目标就不能通过腐蚀还原

Tip : 看开、闭运算的作用,主要看第一次操作是膨胀还是腐蚀,因为第一次占的是主导作用,而第二次的膨胀腐蚀操作只是还原目标

 

2. 代码实现 

2.1 开运算

代码为:

这里iteration 代表open运算的迭代次数。

这里是先进行五次腐蚀,然后再五次膨胀

而不是重复五次开运算,因为重复开运算结果是不变的

import cv2
import numpy as np

img = cv2.imread('./img.png',0)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))  # 获取矩形结构元
dst = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=5)

cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey()
cv2.destroyAllWindows()

处理结果为:

可以发现毛刺被处理掉了,这里因为腐蚀会将这种毛刺消去,然后膨胀将主要的前景还原

形态学 - 开运算和闭运算_第3张图片

 

2.2 闭运算

代码为:

import cv2
import numpy as np

img = cv2.imread('./img.png',0)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))  # 获取矩形结构元
dst = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel,iterations=3)

cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey()
cv2.destroyAllWindows()

处理结果为:

膨胀的操作会将内部的孔洞填充,然后闭运算将目标的大小还原

形态学 - 开运算和闭运算_第4张图片

 

你可能感兴趣的:(数字图像处理,opencv,python,图像处理)