效果

从左向右依次为:原图、腐蚀、膨胀
drawing

从左向右依次为:原图、开运算、闭运算
drawing

OpenCV实现

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img_bin = cv.imread(binary_img_path, -1) # 读入二值图,如果不是二值图,先自己二值化
kernel = np.ones((3,3), dtype=np.int)
img_erode = cv.erode(img_bin, kernel) # 腐蚀
img_dilate = cv.dilate(img_bin, kernel) # 膨胀


kernel = cv.getStructuringElement(cv.MORPH_RECT, (3,3))
img_open = cv.morphologyEx(img_bin, cv.MORPH_OPEN, kernel) # 开运算
img_close = cv.morphologyEx(img_bin, cv.MORPH_CLOSE, kernel) # 闭运算

plt.imshow(np.hstack([img_bin, img_erode, img_dilate, img_open, img_close]))
plt.show()

说明:

  1. 未经许可,谢绝转载。
  2. 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
    免费视频教程为0-6章(标题号≤6),可在此处点击观看。
    所有课件及源代码可在此处下载:
    链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
    提取码:11o4
    有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。