跳转至

开运算

概要

本文讲解了数学形态学中的开运算, 展示了不同迭代次数下的开运算效果.

keywords 数学形态学 开运算

开运算Opening

开运算是奋力抵抗的亡国君

开运算(opening) 等于对图像先进行腐蚀(erode) 然后进行膨胀(dilate).

开运算其主要作用与腐蚀相似,与腐蚀操作相比,具有可以基本保持目标原有大小不变的优点。

openbin.gif

通常用于去除小粒噪声。

援引官网的例子, 你可以看到, 开运算去除背景噪点的功效.

opening.png

在opencv中实现开运算, 我们要通过morphologyEx(img, cv2.MORPH_OPEN, kernel) 数学形态学扩展实现开运算.

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

源代码

src/opening_demo.py

'''
    数学形态学 开运算 opening
'''
import cv2
import numpy as np

# 迭代次数
iter_time = 4
# 读入灰度图
img = cv2.imread("dao-bin.png", flags=cv2.IMREAD_GRAYSCALE)

# 创建 核
kernel = np.ones((5,5), np.uint8)
# 开运算
opening_img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel,iterations=iter_time)

cv2.imwrite('dao_opening_k5_iter%d.png'%(iter_time), np.hstack((img, opening_img)))

迭代次数1

dao_opening_k5_iter1

迭代次数2

dao_opening_k5_iter2

迭代次数3

dao_opening_k5_iter3

迭代次数4

dao_opening_k5_iter4

迭代次数5

dao_opening_k5_iter5

这些操作, 映证了之前我们讲过的一句话.

开运算其主要作用与腐蚀相似

有心的同学, 你可以比对一下, 腐蚀与开运算不同迭代次数的对比. 消退的趋势是一致的。

只不过, 开运算得到的图像线条更粗一些.