前文传送门:

「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):图像处理形态学开运算、闭运算以及梯度运算」

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

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

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

  1. import cv2 as cv
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. # 读取图片
  5. source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE)
  6. # 设置卷积核
  7. kernel = np.ones((5, 5), np.uint8)
  8. # 开运算
  9. open = cv.morphologyEx(source, cv.MORPH_OPEN, kernel)
  10. # 顶帽运算
  11. dst = cv.morphologyEx(source, cv.MORPH_TOPHAT, kernel)
  12. # 显示结果
  13. titles = [\'Source Img\',\'Open Img\', \'Tophat Img\']
  14. images = [source, open, dst]
  15. # matplotlib 绘图
  16. for i in range(3):
  17. plt.subplot(1, 3, i+1), plt.imshow(images[i],\'gray\')
  18. plt.title(titles[i])
  19. plt.xticks([]),plt.yticks([])
  20. plt.show()

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

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

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

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

  1. import cv2 as cv
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. # 读取图片
  5. source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE)
  6. # 设置卷积核
  7. kernel = np.ones((5, 5), np.uint8)
  8. # 黑帽运算
  9. dst = cv.morphologyEx(source, cv.MORPH_BLACKHAT, kernel)
  10. # 构造显示结果数组
  11. titles = [\'Source Img\', \'Black Img\']
  12. images = [source, dst]
  13. # matplotlib 绘图
  14. for i in range(2):
  15. plt.subplot(1, 2, i+1), plt.imshow(images[i],\'gray\')
  16. plt.title(titles[i])
  17. plt.xticks([]),plt.yticks([])
  18. plt.show()

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

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

版权声明:本文为babycomeon原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/babycomeon/p/13129195.html