主要功能:
对彩色/灰度/二值图像进行腐蚀与膨胀运算
腐蚀的作用
对象大小减少一个像素(3*3)
平滑对象边缘
弱化或者分割图像之间的半岛型连接
膨胀的作用
对象大小增加一个像素(3*3)
平滑对象边缘
减少或者填充对象之间的距离
import cv2 as cv
import numpy as np
# 腐蚀
def erode_demo(image):
print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #图像转灰度图
# 将灰度图转为二值图 ret是阈值 binary是二值图
ret, binary = cv.threshold(gray, 0 ,255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow('binary', binary) # 显示二值图像
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) # 定义覆盖区域的大小
dst = cv.erode(binary, kernel) # 腐蚀操作
cv.imshow("erode_demo", dst)
# 膨胀
def expand_demo(image):
print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #图像转灰度图
# 将灰度图转为二值图 ret是阈值 binary是二值图
ret, binary = cv.threshold(gray, 0 ,255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow('binary', binary) # 显示二值图像
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) # 定义覆盖区域的大小
dst = cv.dilate(binary, kernel) # 膨胀操作
cv.imshow("expand_demo", dst)
# 对彩色图像膨胀腐蚀
def color_demo(image):
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) # 定义覆盖区域的大小
dst1 = cv.erode(image, kernel) # 腐蚀操作
dst2 = cv.dilate(image, kernel) # 膨胀操作
cv.imshow('color_fushi', dst1)
cv.imshow('color_pengzhang', dst2)
src = cv.imread('F:001.jpg')
#cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow("0", src)
erode_demo(src)
expand_demo(src)
color_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
输出结果: