OpenCV-Python——第13章:图像的形态学操作(腐蚀,膨胀,开运算,闭运算....)

目录

1.1 腐蚀    1.2 膨胀     2 高级形态学转换    3 举例


形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。 

1 基础形态学转换

1.1 腐蚀

cv2.erode(src, kernel, dst, anchor, iterations, borderType, borderValue)

  • src:输入图像
  • kernel:卷积核
  • dst:输出图像
  • anchor:核的基准点,默认为(-1, -1), 说明位于核的中心位置,基准点即kernel中与进行处理的像素点重合的点。
  • iterations:迭代次数
  • borderType:边界类型
  • borderValue:边界参数

腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。

1.2 膨胀

cv2.dilate(src, kernel, dst, anchor, iterations, borderType, borderValue)

  • 同上

粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。 膨胀也可以用来连接两个分开的物体。

 

2 高级形态学转换

cv2.morphologyEx(src, op, kernel, dst, anchor, iterations, borderType, borderValue)

  • 同上
  • op:操作类型共5种

开运算: cv2.MORPH_OPEN     

            先进性腐蚀再进行膨胀就叫做开运算。就像我们上面介绍的那样,它被用 来去除噪声。

闭运算: cv2.MORPH_CLOSE        

            先膨胀再腐蚀。它经常被用来填充前景物体中的小洞,或者前景物体上的小黑点。

形态学梯度: cv2.MORPH_GRADIENT 

            结果看上去就像前景物体的轮廓。

礼帽: cv2.MORPH_TOPHAT

            原始图像与进行开运算之后得到的图像的差。

黑帽: cv2.MORPH_BLACKHAT

            进行闭运算之后得到的图像与原始图像的差。

它们与基础形态学转换之间的关系也可表示为:

  • Opening:    dst = open(src, element) = dilate(erode(src, element), element)

  • Closing:    dst = close{src, element) = erode(dilate(src, element), element)

  • Morphological gradient:    dst = morph_grad(src, element) = dilate(src, element) - erode(src, element)

  • “Top hat”:    dst = tophat(src, element) = src - open(src, element)

  • “Black hat”:    dst = blackhat(src, element) = close(src, element)  - src

 

3 举例

输入图像如下:

开运算,闭运算的输入图像 

 其他的输入图像:

代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('test17.png')
img1 = cv2.imread('test16.png')

kernel = np.ones((5, 5), np.uint8)  # 卷积核
kernel2 = np.ones((10, 10), np.uint8)  # 卷积核

erosion = cv2.erode(img, kernel, iterations=1)  # 腐蚀
dilation = cv2.dilate(img, kernel, iterations=1)  # 膨胀
opening = cv2.morphologyEx(img1, cv2.MORPH_OPEN, kernel)  # 开运算
closing = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, kernel)  # 闭运算
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)  # 形态学梯度
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel2)  # 礼帽
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel2)  # 黑帽

plt.subplot(241), plt.imshow(img), plt.title('Original')
plt.subplot(242), plt.imshow(erosion), plt.title('Erosion')
plt.subplot(243), plt.imshow(dilation), plt.title('Dilation')
plt.subplot(244), plt.imshow(opening), plt.title('Opening')
plt.subplot(245), plt.imshow(closing), plt.title('Closing')
plt.subplot(246), plt.imshow(gradient), plt.title('Gradient')
plt.subplot(247), plt.imshow(tophat), plt.title('Tophat')
plt.subplot(248), plt.imshow(blackhat), plt.title('Blackhat')

plt.show()

结果如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页
评论

打赏作者

YukinoSiro

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值