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()

结果如下:

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值