知识体系
侵蚀
侵蚀的思想就像土壤侵蚀一样,它侵蚀前景物体的边界(尽量使前景保持白色)
原理:卷积核通过在图像中不断滑动,原始图像中的一个像素(无论是1还是0),只有当内核下所有的像素都是1时才被认为是1,否则它就会被侵蚀。
效果:根据内核的大小,边界上的像素都会被丢弃,边界会不断被腐蚀
import cv2 import numpy as np img = cv2.imread("8.png") kernel = np.ones((5,5),np.uint8) #侵蚀函数 erosion = cv2.erode(img,kernel,iterations=3) cv2.imshow("img",erosion) cv2.waitKey(0) cv2.destroyAllWindows()
扩张
它与侵蚀正好相反。如果内核下的至少一个像素为“ 1”,则像素元素为“ 1”。因此,它会增加图像中的白色区域或增加前景对象的大小。通常,在消除噪音的情况下,腐蚀后会膨胀。因为腐蚀会消除白噪声,但也会缩小物体。因此,我们对其进行了扩展。由于噪音消失了,它们不会回来,但是我们的目标区域增加了。在连接对象的损坏部分时也很有用。
替换erosion = cv2.erode(img,kernel,iterations=3)函数即可
# 扩张函数 dilation = cv2.dilate(img,kernel,iterations=1)
cv2.erode()/cv2.dilate()函数
功能:侵蚀/扩张
输入参数:
1.图像名img
2.卷积核
3.腐蚀或扩张程度
‘修改卷积核大小和改变侵蚀/扩张程度效果相似,不过iterations的效果更优越
侵蚀核扩张的效果对比
形态学梯度
突出轮廓
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
效果如下:
开运算
开运算,即先侵蚀,再扩张,有利于消除外部噪点
# 开运算 opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
morphologyEx()函数
功能:开运算/顶帽、闭运算/黑帽
输入参数:
1.图像名img
2.开运算(cv2.MORPH_OPEN)/顶帽(cv2.MORPH_TOPHAT)、闭运算(cv2.MORPH_CLOSE)/黑帽(cv2.MORPH_BLACKHAT)
3.卷积核
顶帽
顶帽,即输入图像-开运算
# 顶帽 tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
闭运算
闭运算,即先扩张,再侵蚀,有利于消除内部噪点
# 闭运算 closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
黑帽
黑帽,即输入图像-闭运算
# 黑帽 blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
运算效果
效果相当明显了
代码程序
import cv2 import numpy as np img = cv2.imread("8.png") kernel = np.ones((5,5),np.uint8) #侵蚀函数 erosion = cv2.erode(img,kernel,iterations=3) # 扩张函数 # dilation = cv2.dilate(img,kernel,iterations=1) # 开运算 # opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) # 闭运算 # closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) # 形态学梯度 # gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # 顶帽 # tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) # 黑帽 # blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) cv2.imshow("img",erosion) cv2.waitKey(0) cv2.destroyAllWindows()