OpenCV第八章——腐蚀与膨胀

1. 腐蚀

什么是腐蚀操作:

在OpenCV中,腐蚀操作是一种形态学处理技术,用于图像的前景区域(通常是白色区域)进行缩小处理。它的基本思想是通过结构元素(也称为内核)来"侵蚀"图像中的前景对象,使得前景区域变小,从而去除小的噪声或细节,或者填补图像中的小孔洞。

腐蚀操作的基本概念

腐蚀(Erosion)操作涉及到将结构元素(通常是一个小的矩形、圆形或其他形状的矩阵)应用到图像上。对于图像中的每一个像素位置,结构元素会滑动到该位置上,并与图像的对应部分进行比较。

  • 如果结构元素完全位于前景区域内,则结构元素的中心位置保留原像素值。
  • 否则,结构元素的中心位置会被设置为背景值(通常是0)。

腐蚀操作的步骤

  1. 选择结构元素: 结构元素是一个小的矩阵,定义了腐蚀操作的形状和大小。常用的形状有矩形、椭圆和十字形。

  2. 滑动结构元素: 将结构元素在图像上滑动,逐个像素地应用腐蚀操作。

  3. 更新图像: 根据结构元素与图像的重叠部分的匹配情况,更新图像的像素值。

腐蚀操作的语法结构

OpenCV将腐蚀操作封装成了erode()方法,其语法结构如下:

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

参数说明:

src;原始图像

kernel:腐蚀使用的核

anchor:可选参数,核的锚点位置

iterations:可选参数,腐蚀操作的迭代次数

borerType:可选参数,边界样式

borderValue:可选参数,边界值

返回值说明:

dst:经过腐蚀之后的图像

操作用图片:

腐蚀操作运行代码:

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")  
k = np.ones((3, 3), np.uint8)  # 创建3*3的数组作为核
cv2.imshow("img", img)  # 原图
dst = cv2.erode(img, k)  # 腐蚀操作
cv2.imshow("dst", dst)  # 腐蚀效果
cv2.waitKey()  
cv2.destroyAllWindows()  

操作结果图像:

2. 膨胀

什么是膨胀操作:

膨胀操作是OpenCV中的一种形态学处理技术,用于扩展图像中的前景区域(通常是白色区域)。它的基本思想是通过结构元素"扩张"图像中的前景对象,使得前景区域变大,从而填补小的空隙或连接断裂的部分。膨胀操作的步骤类似于腐蚀,但相反:

  1. 选择结构元素:选择一个结构元素来定义膨胀操作的形状和大小。

  2. 滑动结构元素:将结构元素在图像上滑动,每个像素位置的值会根据结构元素与图像的重叠部分进行更新。

  3. 更新图像:如果结构元素与图像的重叠部分有前景像素,则结构元素中心位置被设置为前景值(通常是255)。

膨胀操作的语法结构:

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

参数说明:

src:原始图像

kernel:膨胀使用的核

anchor:可选参数, 核的锚点位置

iterations:可选参数,腐蚀操作的迭代次数,默认值为1

borderType:可选参数, 边界样式

borderValue:可选参数, 边界值
操作用图片

膨胀操作的示例代码 :

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")  
k = np.ones((9, 9), np.uint8)  # 创建9*9的数组作为核
cv2.imshow("img", img)  
dst = cv2.dilate(img, k)  # 膨胀操作
cv2.imshow("dst", dst)  # 显示膨胀效果
cv2.waitKey()  
cv2.destroyAllWindows()  

操作结果图像:

3. 开运算

什么是开运算:

开运算是一种形态学处理技术,结合了腐蚀和膨胀操作,用于去除图像中的小物体或噪声,同时保持较大物体的形状和大小。开运算的基本步骤如下:

  1. 腐蚀:首先对图像进行腐蚀操作,去除图像中的小的噪声或细节。
  2. 膨胀:然后对腐蚀后的图像进行膨胀操作,恢复较大物体的形状和边界。
    操作用图片

开运算操作代码实例:

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")  
k = np.ones((5, 5), np.uint8)  # 创建5*5的数组作为核
cv2.imshow("img", img)  
dst = cv2.erode(img, k)  # 腐蚀操作
dst = cv2.dilate(dst, k)  # 膨胀操作
cv2.imshow("dst", dst)  # 显示开运算结果
cv2.waitKey()  
cv2.destroyAllWindows()  

开运算操作效果图像:

4. 闭运算

什么是闭运算?

开运算是一种形态学处理技术,结合了腐蚀和膨胀操作,用于去除图像中的小物体或噪声,同时保持较大物体的形状和大小。开运算的基本步骤如下:

  1. 腐蚀:首先对图像进行腐蚀操作,去除图像中的小的噪声或细节。
  2. 膨胀:然后对腐蚀后的图像进行膨胀操作,恢复较大物体的形状和边界。

闭运算操作代码实例:

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")  
k = np.ones((15, 15), np.uint8)  # 创建15*15的数组作为核
cv2.imshow("img", img) 
dst = cv2.dilate(img, k)  # 膨胀操作
dst = cv2.erode(dst, k)  # 腐蚀操作
cv2.imshow("dst2", dst)  # 闭运算结果
cv2.waitKey()  
cv2.destroyAllWindows()  

闭运算操作效果图像:

5. 形态学方法

cv2.MORPH_ERODE:腐蚀操作

cv2.MORPH_DILATE:膨胀操作

cv2.MORPH_OPEN:开运算,先腐蚀后膨胀

cv2.MORPH_CLOSE:闭运算,先膨胀后腐蚀

cv2.MORPH_GRADIENT:梯度运算,膨胀图减腐蚀图可以得出建议的轮廓

cv2.MORPH_TOPHAT:顶帽运算,原始图像减开运算图像

cv2.MORPH_BLACKHAT:黑帽运算,闭运算图像减原始图像

5.1 梯度运算

什么是梯度运算?

梯度简单理解为像素的变化程度。梯度运算的运算过程就是让原图的膨胀图像减去原图的腐蚀图像

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")  
k = np.ones((5,5), np.uint8)  # 创建5*5的数组作为核
cv2.imshow("img", img)  # 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k) # 进行梯度运算
cv2.imshow("dst", dst)  # 显示梯度运算结果
cv2.waitKey()  
cv2.destroyAllWindows()  

操作效果图像:

5.2 顶帽运算

什么是顶帽运算?

原图减去图像的开运算图像,得到的结果只剩下外部细节

操作用图像:

操作代码示例:

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"B:\Python_opencv_book\08\06\spider.png")  # 读取原图
k = np.ones((5, 5), np.uint8)  # 创建5*5的数组作为核
cv2.imshow("img", img)  # 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)  # 进行顶帽运算
cv2.imshow("dst", dst)  # 显示顶帽运算结果
cv2.waitKey()  
cv2.destroyAllWindows()  

操作结果图像:

5.3 黑帽运算

什么是黑帽运算?

原图的闭运算图像减去原图。剩下内部细节

操作用图像:

操作代码示例:

python 复制代码
import cv2
import numpy as np
img = cv2.imread(r"B:\Python_opencv_book\08\07\spider2.png")  # 读取原图
k = np.ones((5, 5), np.uint8)  # 创建5*5的数组作为核
cv2.imshow("img", img)  # 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)  # 进行黑帽运算
cv2.imshow("dst", dst)  # 显示黑帽运算结果
cv2.waitKey()  
cv2.destroyAllWindows()

操作效果图像:

那么有关关于腐蚀与膨胀的内容到这里就结束了!!!感谢大家的观看!!!

相关推荐
程序小旭2 小时前
机器视觉基础—双目相机
计算机视觉·双目相机
qzhqbb2 小时前
基于统计方法的语言模型
人工智能·语言模型·easyui
冷眼看人间恩怨3 小时前
【话题讨论】AI大模型重塑软件开发:定义、应用、优势与挑战
人工智能·ai编程·软件开发
2401_883041083 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
AI极客菌4 小时前
Controlnet作者新作IC-light V2:基于FLUX训练,支持处理风格化图像,细节远高于SD1.5。
人工智能·计算机视觉·ai作画·stable diffusion·aigc·flux·人工智能作画
阿_旭4 小时前
一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
人工智能·深度学习·计算机视觉·cross-attention·self-attention
王哈哈^_^4 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
Power20246665 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k5 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫5 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法