是图像处理学科的一个单独分支学科,灰度与二值图像处理中重要手段,是由数学的集合论等相关理论发展起来。
卷积核所对应的原图像的像素值只要有一个是1,中心像素值就是1。一般在除噪是,先腐蚀再膨胀,因为腐蚀在去除白噪声的时候也会使图像缩小,所以我们之后要进行膨胀。当然也可以用来将两者物体分开。
作用:对象大小增加一个像素;平滑对象边缘;减少或者填充对象之间的距离
腐蚀会把物体的边界腐蚀掉,卷积核沿着图象滑动,如果卷积核对应的原图的所有像素值为1,那么中心元素就保持原来的值,否则变为零。主要应用在去除白噪声,也可以断开连在一起的物体。
作用:对象大小减小一个像素;平滑对象边缘;弱化或者分割图像之间的半岛型连接
import cv2
import numpy as np
from matplotlib import pyplot as plt
__author__ = "zxsuperstar"
__email__ = "[email protected]"
"""
图像形态学 -- 膨胀与腐蚀
腐蚀是一种消除边界点,使边界向内部收缩的过程
可以用来消除小且无意义的物体.
腐蚀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为1,结果图像的该像素为1;否则为0.
结果:使二值图像减小一圈.
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程
可以用来填补物体中的空洞.
膨胀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为0,结果图像的该像素为0;否则为1.
结果:使二值图像扩大一圈
腐蚀
cv2.erode(src, # 输入图像
kernel, # 卷积核
dst=None,
anchor=None,
iterations=None, # 迭代次数,默认1
borderType=None,
borderValue=None)
膨胀
cv2.dilate(src, # 输入图像
kernel, # 卷积核
dst=None,
anchor=None,
iterations=None, # 迭代次数,默认1
borderType=None,
borderValue=None)
"""
def erode_demo(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGRA2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
cv2.imshow("binary", binary)
"""
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) # 十字结构
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形结构
"""
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2)) #定义 kernel 矩阵
dst = cv2.erode(binary,kernel) #腐蚀
# dst = cv2.dilate(binary, kernel) # 膨胀
cv2.imshow("erode",dst)
if __name__ == "__main__":
image = cv2.imread("11.jpg") #blue green red
erode_demo(image)
cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:腐蚀和膨胀