python-opencv 之开运算、闭运算、形态学梯度、“礼帽”和“黑帽”

本文详细介绍了OpenCV库中的形态学操作,包括开运算、闭运算、形态梯度、顶帽和黑帽等。这些操作在图像处理中用于消除噪声、分离物体和突出边缘。通过实例代码展示了如何使用Python和OpenCV实现这些操作,以改善图像质量。
摘要由CSDN通过智能技术生成

函数原型

运行形态学操作的核心函数是morphologyEx。在本例中,我们使用了4个参数(其余使用默认值):

  1. src : 原 (输入) 图像
  2. dst: 输出图像
  3. operation: 需要运行的形态学操作。 我们有5个选项:
    • Opening: MORPH_OPEN : 2
    • Closing: MORPH_CLOSE: 3
    • Gradient: MORPH_GRADIENT: 4
    • Top Hat: MORPH_TOPHAT: 5
    • Black Hat: MORPH_BLACKHAT: 6
  4. kernel: 形态学运算的内核。

前一节我们讨论了两种最基本的形态学操作:

  • 腐蚀 (Erosion)
  • 膨胀 (Dilation)

运用这两个基本操作,我们可以实现更高级的形态学变换。

开运算 (Opening)

开运算是通过先对图像腐蚀再膨胀实现的。
在这里插入图片描述
能够排除小团块物体。

代码
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel  = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#开运算: 先腐蚀后膨胀
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#闭运算:先膨胀后腐蚀

cv2.imshow("opening",opening)
cv2.imshow("closing",closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图
在这里插入图片描述
开运算
在这里插入图片描述

闭运算(Closing)

闭运算是通过先对图像膨胀再腐蚀实现的。
在这里插入图片描述
能够排除小型黑洞(黑色区域)。

代码

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

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel  = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)#开运算: 先腐蚀后膨胀
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#闭运算:先膨胀后腐蚀

cv2.imshow("opening",opening)
cv2.imshow("closing",closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

闭运算
在这里插入图片描述

形态梯度(Morphological Gradient)

膨胀图与腐蚀图之差
在这里插入图片描述
能够保留物体的边缘轮廓。

代码
#梯度运算  = 膨胀 - 腐蚀
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
kernel  = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow("cycle",opening)

kernel = np.ones((5,5),np.uint8)
gradient = cv2.morphologyEx(opening,cv2.MORPH_GRADIENT,kernel)
cv2.imshow("gradient",gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

顶帽(Top Hat)

原图像与开运算结果图之差

在这里插入图片描述

代码
#礼帽 = 原始如输入 - 开运算
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)
kernel = np.ones((5,5),np.uint8)

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

tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow("tophat",tophat)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

黑帽(Black Hat)

闭运算结果图与原图像之差
在这里插入图片描述

代码
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)
#kernel = np.ones((5,5),np.uint8)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow("closing",closing)

blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow("blackhat",blackhat)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的蕉尼基

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值