Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算

前文传送门:

“Python 图像处理 OpenCV (1):入门”

“Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像”

“Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理”

“Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间”

“Python 图像处理 OpenCV (5):图像的几何变换”

“Python 图像处理 OpenCV (6):图像的阈值处理”

“Python 图像处理 OpenCV (7):图像平滑(滤波)处理”

“Python 图像处理 OpenCV (8):图像腐蚀与图像膨胀”

“Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算”

引言

今天是图形处理形态学的最后一篇,我们介绍顶帽运算和黑帽运算。

建议先阅读前面两篇图像处理的内容:

“Python 图像处理 OpenCV (8):图像腐蚀与图像膨胀”

“Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算”

形态学之顶帽运算

图像处理顶帽运算是一个获取图像噪声的运算,它是由原始图像减去图像开运算而得到的结果:

顶帽运算 = 原始图像 - 开运算

图像顶帽运算同样是使用形态学扩展函数 morphologyEx() ,它的参数是 MORPH_TOPHAT ,示例如下:

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

# 读取图片
source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE)

# 设置卷积核
kernel = np.ones((5, 5), np.uint8)

# 开运算
open = cv.morphologyEx(source, cv.MORPH_OPEN, kernel)

# 顶帽运算
dst = cv.morphologyEx(source, cv.MORPH_TOPHAT, kernel)

# 显示结果
titles = ['Source Img','Open Img', 'Tophat Img']
images = [source, open, dst]

# matplotlib 绘图
for i in range(3):
   plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

形态学之黑帽运算

图像处理顶帽运算是一个获取图像内部的小孔,或者前景色中的小黑点的运算。

它是由图像闭运算减去原始图像的操作:

黑帽运算 = 闭运算图像 - 原始图像

图像顶帽运算同样是使用形态学扩展函数 morphologyEx() ,它的参数是 MORPH_BLACKHAT ,示例如下:

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

# 读取图片
source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE)

# 设置卷积核
kernel = np.ones((5, 5), np.uint8)

# 黑帽运算
dst = cv.morphologyEx(source, cv.MORPH_BLACKHAT, kernel)

# 构造显示结果数组
titles = ['Source Img', 'Black Img']
images = [source, dst]

# matplotlib 绘图
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

今天的内容比较短,至此,图像形态学的几个基础的运算已经全部介绍完毕,希望各位同学能理解这几个运算的原理,而不是仅仅知道了几个参数或者说几个方法的调用。

示例代码

如果有需要获取源码的同学可以在公众号回复“OpenCV”进行获取。