一、简介
腐蚀与膨胀是形态学两个基本操作
图像形态学:
是图像处理学科的一个独立分支。主要用来处理灰度和二值图像。,也可用来处理彩色图像
形态学操作的基础:
1.1 膨胀
前提: 结构元素/模板,通常3×3大小。(膨胀和腐蚀,都支持任意形状的结构元素/模板)
膨胀:用结构元素/模板在图像中滑动,结构元素/模板覆盖的图像块中最大像素值替换图像块的中间像素值。
膨胀作用:
(1)对象大小增加一个像素(模板为3×3时)
(2)平滑对象边缘
(3)减少或者填充对象之间的距离。
1.2 腐蚀
前提: 结构元素/模板,通常3×3大小。(膨胀和腐蚀,都支持任意形状的结构元素/模板)
腐蚀:用结构元素/模板在图像中滑动,结构元素/模板覆盖的图像块中最小像素值替换图像块的中间像素值。
腐蚀作用:
(1)对象大小减小1个像素(模板大小为3×3时)
(2)平滑对象边缘
(3)弱化或者分割图像之间的半岛形连接
二、实践
2.1 灰度图
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
'''腐蚀'''
def erode_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
#结构元素/模板
kernel=cv.getStructuringElement(cv.MORPH_RECT,(3,3))
#腐蚀
dst=cv.erode(binary,kernel)
cv.imshow('erode',dst)
'''膨胀'''
def dilate_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
#结构元素/模板
kernel=cv.getStructuringElement(cv.MORPH_RECT,(10,10))
#膨胀
dst=cv.erode(binary,kernel)
cv.imshow('dilate',dst)
img = cv.imread(r'D:\Project\Opencv\Learning01\number.jpg')
cv.imshow('origin',img)
erode_demo(img)
dilate_demo(img)
cv.waitKey(0)
2.2 彩色图
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
'''对彩色图进行腐蚀和膨胀'''
img = cv.imread(r'D:\Project\Opencv\Learning01\angelababy.jpg')
cv.imshow('origin',img)
kernel=cv.getStructuringElement(cv.MORPH_RECT,(5,5))
dst1=cv.erode(img,kernel)
dst2=cv.dilate(img,kernel)
cv.imshow('erode',dst1)
cv.imshow('dilate',dst2)
cv.waitKey(0)
cv.destroyAllWindows()