0
点赞
收藏
分享

微信扫一扫

【OpenCV-Python】:形态学操作之腐蚀与膨胀

Go_Viola 2022-03-30 阅读 127

目录

😺一、引言

形态学(morphology)通常表示生物学的一个分支,该分支主要研究动植物的形态核结构。我们使用同一词语表示数学形态学的内容,将数学形态学作为工具从图像中提取表达和描绘区域形状的有用图像分量。

形态学操作有多种:腐蚀、膨胀、开运算、闭运算、顶帽黑帽等。

今天主要讲形态学操作中的最基本操作:腐蚀与膨胀。

😺二、腐蚀(erosion)

🐶2.1 什么是腐蚀

简单来说,腐蚀就是把图像中的物体变小了!

腐蚀的工作过程如下图所示,A是一个集合,B是一个结构单元,我们使用B去对集合A进行腐蚀,腐蚀过程如C所示,在腐蚀过程中,结构单元必须全部位于集合A中才能进行腐蚀操作,最终得到的结果即为D所示。
在这里插入图片描述

🐶2.2 程序编写及结果可视化

下面程序使用腐蚀来对图像中的一些毛刺进行去除。

import cv2
import numpy as np


ori = cv2.imread(r"C:\Users\Lenovo\Desktop\original.jpg")   # 读取图像

kernel1 = np.ones((3, 3), np.uint8)     # 3个不同尺度的腐蚀单元
kernel2 = np.ones((5, 5), np.uint8)
kernel3 = np.ones((7, 7), np.uint8)

erosion1 = cv2.erode(ori, kernel1)		# 腐蚀函数
erosion2 = cv2.erode(ori, kernel2)
erosion3 = cv2.erode(ori, kernel3)

cv2.imshow("original", ori)
cv2.imshow("erosion1", erosion1)
cv2.imshow("erosion2", erosion2)
cv2.imshow("erosion3", erosion3)

cv2.imwrite(r'C:\Users\Lenovo\Desktop\erosion1.jpg', erosion1)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\erosion2.jpg', erosion2)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\erosion3.jpg', erosion3)

cv2.waitKey()

下面展示的是程序得到的结果图,由图可知,腐蚀能对图像中的毛刺进行去除,但这也与腐蚀单元的大小有关, 3 × 3 3×3 3×3大小的核去除效果不如 5 × 5 5×5 5×5 7 × 7 7×7 7×7,此外 7 × 7 7×7 7×7的核使得图像变得更加细小。
在这里插入图片描述

😺三、膨胀(dilation)

🐶3.1 什么是膨胀

简单来说,膨胀就是把图像中的物体变大了!

膨胀的工作过程如下图所示,A是一个集合,B是一个结构单元,我们使用B去对集合A进行膨胀,膨胀过程如C所示,在膨胀过程中,结构单元只要有一个位于集合A中就能进行膨胀操作,最终得到的结果即为D所示。

在这里插入图片描述

🐶3.2 程序编写及结果可视化

下面程序使用膨胀来对图像中的一些区域进行扩张。

import cv2
import numpy as np


ori = cv2.imread(r"C:\Users\Lenovo\Desktop\original.jpg")   # 读取图像

kernel1 = np.ones((3, 3), np.uint8)     # 3个不同尺度的腐蚀单元
kernel2 = np.ones((5, 5), np.uint8)
kernel3 = np.ones((9, 9), np.uint8)

dilation1 = cv2.dilate(ori, kernel1)    # 膨胀函数
dilation2 = cv2.dilate(ori, kernel2)
dilation3 = cv2.dilate(ori, kernel3)

cv2.imshow("original", ori)
cv2.imshow("dilation1", dilation1)
cv2.imshow("dilation2", dilation2)
cv2.imshow("dilation3", dilation3)

cv2.imwrite(r'C:\Users\Lenovo\Desktop\dilation1.jpg', dilation1)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\dilation2.jpg', dilation2)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\dilation3.jpg', dilation3)

cv2.waitKey()

下面展示的是程序得到的结果图,由图可知,膨胀能对图像中的物体进行扩张,但这也与膨胀单元的大小有关,越大的膨胀核使得图像扩张区域更大。

在这里插入图片描述

举报

相关推荐

0 条评论