Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】

?
Open_CV形态学运算专题 腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算
?
????????????【Python-Open_CV系列(十)】
?

文章目录

  • 1. 腐蚀 & 膨胀
    • 1.1什么是腐蚀&膨胀
    • 1.2 腐蚀方法 cv2.erode()
    • 1.3 膨胀方法 cv2.dilate()
  • 2. 开运算 & 闭运算
    • 2.1 简述
    • 2.2 开运算
    • 2.3 闭运算
  • 3. morphologyEx()方法
    • 3.1 morphologyEx()方法 介绍
    • 3.2 梯度运算
    • 3.3 顶帽运算
    • 3.4 黑帽运算

??????????????????????????????????????????????????????????????????????????????????????????????
?????????????????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片
Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片
Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片
Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片
Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??=========================================================
大家好,我是侯小啾!Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

?
?
?Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片
欢迎各路大佬来到小啾主页指点??。今天小啾要分享的内容是,Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )。Python-Open_CV系列博文第十篇 。如有疑问欢迎随时在评论区交流。??

??=========================================================

1. 腐蚀 & 膨胀 1.1什么是腐蚀&膨胀
腐蚀&膨胀是图像形态学中的两种核心操作,
腐蚀可以描述为是让图像沿着自己的边界向内收缩,
而膨胀则刚好与收缩相反,可以描述为是让图像沿着边界向内扩张。

这两种操作的逻辑和作用都和上篇(第九篇)讲到的使用滤波器做平滑处理有些类似,不同之处在于,腐蚀求的是滤波核内像素的最小值,而膨胀求的是最大值。并将计算出的值复制给锚点位置的像素。
作用上同平滑处理类似,可以消除噪声。
因为腐蚀求的是最小值,膨胀求的是最大值,所以经过腐蚀操作的图像的总体亮度会有所降低,而经过膨胀操作的图像的总体亮度会有所升高。
为方便示例,准备以下图片素材(test1.jpg):
??????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

1.2 腐蚀方法 cv2.erode()
python中OpenCV使用cv2.erode()方法实现腐蚀操作。
该方法语法如下:

cv2.erode(src, kernel, anchor=None, iterations=None, borderType=None, borderValue=https://www.it610.com/article/None)
  • scr 原图像
  • kernel 腐蚀要用到的核
  • anchor 锚点
  • iterations 可选参数,腐蚀操作的迭代次数,默认为1。
  • borderType 边界样式,可选。
  • borderValue 边界值,可选。
其中kernel这个参数,核,需要手动取创建一个数组,而不能是像滤波器那样指定一个大小。
import cv2 import numpy as np img = cv2.imread("test1.jpg") # 创建3*3的数组作为滤波核 k = np.ones((3, 3), np.uint8) dst = cv2.erode(img, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

腐蚀效果如下,如图,我们的鱼骨显得年代更久远了,鱼刺消失、变暗了相当一部分。
????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

1.3 膨胀方法 cv2.dilate()
【Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】】python中OpenCV使用cv2.dilate()方法实现膨胀操作。
该方法语法如下:

dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=https://www.it610.com/article/None)
可以看出,其参数用法同cv2.erode()的参数。
import cv2 import numpy as np img = cv2.imread("test1.jpg") # 创建16*16的数组作为核 k = np.ones((16, 16), np.uint8) dst = cv2.dilate(img, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

膨胀效果如下,如图所示,图片众多鱼的亮度明显变高了。
??????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

这种图像效果,也被称之为“近视眼”效果。

2. 开运算 & 闭运算 2.1 简述
开运算就是将图像先进性腐蚀操作,再进行膨胀操作。其可以用来抹除图像外部的细节(噪声)。
闭运算则与之相反,
闭运算是先对图像进行膨胀操作,在进行腐蚀操作。其可以用来抹除图像的内部细节(噪声)。

腐蚀和膨胀虽然是逆操作,但是开运算和闭运算都不会使图像恢复原状。
2.2 开运算
以 3 为核
代码示例如下

import cv2 import numpy as np img = cv2.imread("test1.jpg") k = np.ones((3, 3), np.uint8) dst = cv2.erode(img, k) dst = cv2.dilate(dst, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

??????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

2.3 闭运算
以 10 为核
代码示例如下

import cv2 import numpy as np img = cv2.imread("test1.jpg") k = np.ones((10, 10), np.uint8) dst = cv2.dilate(img, k) dst = cv2.erode(dst, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

??????Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

3. morphologyEx()方法 3.1 morphologyEx()方法 介绍
在python中OpenCV还提供了morphologyEx()方法(形态学方法),可以用来完成所有常用的形态学运算。
morphologyEx()语法如下:
morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=https://www.it610.com/article/None)

其中
  • scr 表示图像
  • op 表示操作类型
  • kernel 表示 核
  • anchor 表示锚点
  • iterations 为迭代次数,默认为1
  • borderType 是边界样式,默认1
  • borderValue 是边界值,默认1
可以供op选择的操作类型有:
参数值 描述
cv2.MORPH_ERODE 腐蚀
cv2.MORPH_DILATE 膨胀
cv2.MORPH_ OPEN 开运算,先腐蚀后膨胀
cv2.MORPH_CLOSE 闭运算,先膨胀后腐蚀
cv2.MORPH_GRADIENT 梯度运算,膨胀图减腐蚀图
cv2.MORPH_TOPHAT 顶帽运算,原始图减开运算图
cv2.MORPH_BLACKHAT 黑帽运算,闭运算图,减开运算图
接下来我们使用图片"test2.jpg"(下图)来继续下边的示例:
???Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

3.2 梯度运算
对“test2.jpg”以 4 为核做梯度运算:
import cv2 import numpy as np img = cv2.imread("test2.jpg") k = np.ones((4, 4), np.uint8) dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

梯度运算,即膨胀图减去腐蚀图,
?
因为膨胀运算得到的图像中我物体比原图中的“大”,而腐蚀运算得到的图像中的物体是收缩过的,比原图中的“小”,所以膨胀的结果减去腐蚀的结果,会得到一个大概的、不精准的轮廓。
?
test2.jpg梯度运算执行效果如下:
??Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

3.3 顶帽运算
对“test2.jpg”以 4 为核做顶帽运算:
import cv2 import numpy as np img = cv2.imread("test2.jpg") k = np.ones((4, 4), np.uint8) cv2.imshow("img", img) dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

顶帽运算,即原图减去开运算图,
因为开运算抹除了图像的外部细节,所以顶帽运算即“有外部细节的图像 减去 无外部细节的图像”,得到的结果也就只剩外部细节了。
?
顶帽运算处理效果如下:
??Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

3.4 黑帽运算
对“test2.jpg”以 4 为核做顶帽运算:
import cv2 import numpy as np img = cv2.imread("test2.jpg") k = np.ones((4, 4), np.uint8) dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()

黑帽运算,即原图像的闭运算减去原图像
?
因为闭运算可以抹除图像的内部细节,所以黑帽运算即 “无内部细节的图像减去有内部细节的图像”,结果只剩下内部细节。
?
黑帽运算处理效果如下:
??Open_CV形态学运算专题|Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】
文章图片

本次分享就到这里,感谢您的支持!更多精彩内容敬请期待!
本次分享就到这里。小啾感谢您的关注与支持!更多精彩内容敬请期待!
????????????????????????????????????????????????????????

    推荐阅读