目录
1. 介绍
2. 代码实现
2.1 开运算
2.2 闭运算
膨胀和腐蚀操作都会有一个通病,就是会改变原目标的大小
开运算:先对目标腐蚀在膨胀
开运算能够平滑物体的轮廓、断开狭窄的狭颈、消除细长的突出物等等
开运算的一些理解:先腐蚀在膨胀,可以保证目标大致的形状不变
- 改变的部分,是由于腐蚀操作可能会让某些目标消失,这样该目标就不能通过膨胀还原
- 所以开运算后的图像是 原图的子集
- 根据几何解释,所以对同一幅图像重复开运算结果是相同的
闭运算:先膨胀在腐蚀
闭运算能够弥合狭窄的断裂和细长的沟壑、消除小孔、填补轮廓中的缝隙等等
闭运算:先膨胀在腐蚀
- 原图 是 闭运算图像后的子集
- 根据几何解释,所以对同一幅图像重复闭运算结果是相同的
- 增加的部分,是由于膨胀操作可能会让目标之间产生连接,这样该目标就不能通过腐蚀还原
Tip : 看开、闭运算的作用,主要看第一次操作是膨胀还是腐蚀,因为第一次占的是主导作用,而第二次的膨胀腐蚀操作只是还原目标
代码为:
这里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()
处理结果为:
可以发现毛刺被处理掉了,这里因为腐蚀会将这种毛刺消去,然后膨胀将主要的前景还原
代码为:
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()
处理结果为:
膨胀的操作会将内部的孔洞填充,然后闭运算将目标的大小还原