opencv:形态学操作的原理和运用场景,及其代码示例(腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽、黑帽)

文章介绍了形态学操作的基本原理,包括腐蚀、膨胀、开运算、闭运算等,以及它们在去除噪声、平滑边界、分离物体等方面的应用。同时,提供了使用Python的OpenCV库进行这些操作的代码示例,如腐蚀、膨胀、开运算和闭运算等。
摘要由CSDN通过智能技术生成

一、形态学操作的原理

1.腐蚀(Erosion):

将结构元素(结构元素可以类比卷积核)与图像进行逐像素的比较,只有当结构元素完全覆盖对应图像区域时,输出图像对应像素才为前景,否则为背景。腐蚀操作可以使前景区域缩小,去除细小的细节和孤立的像素。

2.膨胀(Dilation):

将结构元素(结构元素可以类比卷积核)与图像进行逐像素的比较,只要结构元素与图像有任何一个相交的像素,输出图像对应像素即为前景,否则为背景。膨胀操作可以使前景区域扩张,填充空洞和连接断裂的区域。

3.开运算(Opening):

先进行腐蚀操作,再进行膨胀操作。开运算可以消除图像中小的噪声和细小的连通区域,平滑边界并保持物体的整体形状。

4.闭运算(Closing):

先进行膨胀操作,再进行腐蚀操作。闭运算可以填充图像中的小孔和断裂,连接邻近的区域,并保持物体的整体形状。

5.梯度运算(Gradient):

通过对膨胀和腐蚀操作的结果进行差异运算,得到图像中边界的强度信息。梯度运算可以提取图像的边缘信息。

6.顶帽运算(Top Hat):

通过对原始图像与开运算结果的差异运算,得到图像中亮度较低的细节信息。顶帽运算可以突出图像中的小细节和亮度变化。

7.黑帽运算(Black Hat):

通过对闭运算结果与原始图像的差异运算,得到图像中亮度较高的细节信息。底帽运算可以突出图像中的大细节和亮度变化。

二、运用场景

1.腐蚀(Erosion):

  • 去除图像中的小噪点和细小的连通区域。
  • 分离接触在一起的物体。
  • 缩小物体的大小。

2.膨胀(Dilation):

  • 填充图像中的空洞和孔隙。
  • 扩大物体的大小。
  • 连接接触在一起的物体。

3.开运算(Opening):

  • 去除图像中的噪点和细小的连通区域。
  • 平滑物体的边界。
  • 分离接触在一起的物体。

4.闭运算(Closing):

  • 填充图像中的空洞和孔隙。
  • 平滑物体的边界。
  • 连接接触在一起的物体。

5.梯度运算(Gradient):

  • 检测图像中的边缘。
  • 分离物体和背景。

6.顶帽运算(Top Hat):

  • 检测图像中小尺寸的明亮区域。
  • 分离物体和背景。

7.黑帽运算(Black Hat):

  • 检测图像中小尺寸的暗区域。
  • 分离物体和背景。

三、代码演示

1.腐蚀

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image.jpg', 0)

# 定义腐蚀操作的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行腐蚀操作
erosion = cv2.erode(image, kernel, iterations=1)

# 显示结果
cv2.imshow('imge', image)
cv2.imshow('Erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述
在这里插入图片描述

2.膨胀

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image.jpg', 0)

# 定义膨胀操作的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行膨胀操作
dilation = cv2.dilate(image, kernel, iterations=1)

# 显示结果
cv2.imshow('imge', image)
cv2.imshow('Dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述
在这里插入图片描述

3.开运算

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image1.jpg', 0)

# 定义开运算的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行开运算
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

# 显示结果
cv2.imshow('image1', image)
cv2.imshow('Opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述
在这里插入图片描述

4.闭运算

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image2.jpg', 0)

# 定义闭运算的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行闭运算
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

# 显示结果
cv2.imshow('image2', image)
cv2.imshow('Closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

5.梯度运算


import cv2
import numpy as np
# 读取图像并转换为灰度图像
pie=cv2.imread('ret.jpg',0)

# 定义梯度操作的结构元素
kernel = np.ones((5, 5), np.uint8)
#腐蚀膨胀
dilate=cv2.dilate(pie,kernel,iterations = 1)
erode=cv2.erode(pie,kernel,iterations = 1)

res=np.hstack((dilate,erode))

cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 读取图像并转换为灰度图像


# 执行梯度操作
gradient = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel,iterations = 1)

# 显示结果
cv2.imshow('Gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述### 6.顶帽运算

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image1.jpg', 0)

# 定义顶帽操作的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行顶帽操作
tophat = cv2.morphologyEx(image, cv2.MORPH_TOPHAT, kernel)

# 显示结果
cv2.imshow('image1', image)
cv2.imshow('Top Hat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

7.黑帽运算

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('image2.jpg', 0)

# 定义底帽操作的结构元素
kernel = np.ones((5, 5), np.uint8)

# 执行底帽操作
bottomhat = cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel)

# 显示结果
cv2.imshow('image2', image)
cv2.imshow('Black Hat', bottomhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值