当前位置:   article > 正文

opencv-python库 cv2开运算闭运算形态学梯度顶部帽底部帽

opencv-python库 cv2开运算闭运算形态学梯度顶部帽底部帽

开运算

cv2中的开运算是图像依次经过腐蚀、膨胀处理后的过程。

开运算实际是先腐蚀运算,再膨胀运算,可以把细微连在一起的两块目标分开。一般来说,开运算可以使图像的轮廓变得光滑,还能使狭窄的连接断开和消除细毛刺。开运算在过滤噪声的同时并没有对物体的形状、轮廓造成明显的影响,这是一大优势。当只关心物体的位置或者个数时,物体形状的改变不会给任务带来困扰,此时用开运算处理具有处理速度上的优势。

闭运算

闭运算

闭运算是图像形态学操作中的一种,是先膨胀后腐蚀的过程。

闭运算能够填充物体内部细小空洞,连接邻近物体,对物体边缘的微小缺口或细小间断进行弥补,使边缘轮廓线更加光滑,但对物体边缘的突出部分则不作处理。因此,闭运算在消除噪声的同时,很好地保持了物体的轮廓形状。

形态学梯度

cv2形态学梯度是图像经过膨胀操作后的图像与经过腐蚀操作后的图像的差,可以用于抽出物体的边缘1。

形态学梯度运算是用图像的膨胀图像减腐蚀图像的操作,该操作可以获取原始图像中前景图像的边缘。通过将函数cv2.morphologyEx()的操作类型参数op设置为"cv2.MORPH_GRADIENT",可以实现形态学梯度运算

顶部帽

在OpenCV中,顶帽(Top Hat)操作是一种形态学操作,用于突出图像中的亮区域。顶帽操作是通过从原始图像中减去其开运算(先腐蚀后膨胀)的结果来得到的。因此,顶帽操作的结果保留了原始图像中比周围区域更亮的区域,而暗于周围区域的部分则变为黑色1。

顶帽操作在图像处理中常用于增强图像的亮区域,特别是在背景和前景亮度差异较大的情况下。它可以帮助突出图像中的亮色物体,同时抑制比周围区域暗的噪声2

底部帽

在OpenCV中,底部帽(Bottom Hat)运算也称为底帽运算或黑帽运算,是形态学图像处理中的一种操作1。

底帽运算是通过对图像执行闭运算(先膨胀后腐蚀)来平滑图像并移除较大尺度的特征,然后将闭运算结果与原始图像进行差分,以突出图像中的暗区域特征。

底帽运算有助于突出原始图像中的暗区域特征,如阴影、均匀区域中的细微细节等,并可用于增强图像中的暗部细节,使其更加清晰。

cv2.morphologyEx()

cv2.morphologyEx() 是 OpenCV 中用于执行高级形态学变换的函数。与 cv2.erode() 和 cv2.dilate() 相比,cv2.morphologyEx() 提供了更多的形态学操作选项,包括开运算、闭运算、梯度、顶部帽、底部帽等。
函数定义

cv2.morphologyEx(src, op, kernel, anchor=None, iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=None)
  • 1
  • src: 输入图像。
  • op: 形态学操作的类型,可以是以下值之一:
    • cv2.MORPH_ERODE:腐蚀。
    • cv2.MORPH_DILATE:膨胀。
    • cv2.MORPH_OPEN:开运算(先腐蚀后膨胀)。
    • cv2.MORPH_CLOSE:闭运算(先膨胀后腐蚀)。
    • cv2.MORPH_GRADIENT:形态学梯度(膨胀图像减去腐蚀图像)。
    • cv2.MORPH_TOPHAT:顶部帽(原始图像减去开运算结果)。
    • cv2.MORPH_BLACKHAT:底部帽(闭运算结果减去原始图像)。
  • kernel: 结构元素或核,决定了形态学操作的形状和大小。
  • anchor: 核的锚点位置。默认为 (-1, -1),表示核的中心。
  • iterations: 操作的迭代次数。
  • borderType: 像素外插法,用于处理图像边界。
  • borderValue: 当 borderType 设置为 cv2.BORDER_CONSTANT 时使用的值。

示例

以下是一个使用 cv2.morphologyEx() 执行开运算和闭运算的示例:

import cv2
import numpy as np

# 读取图像
image = cv2.imread('input.png', cv2.IMREAD_GRAYSCALE)

# 定义一个 5x5 的矩形核
kernel = np.ones((5, 5), np.uint8)

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

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

# 显示原始图像、开运算结果和闭运算结果
cv2.imshow('Original Image', image)
cv2.imshow('Open Operation', open_image)
cv2.imshow('Close Operation', close_image)

# 等待用户按键,然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这个示例中,我们首先读取一个灰度图像,然后定义一个 5x5 的矩形核。接着,我们使用 cv2.morphologyEx() 函数分别执行开运算和闭运算,并将结果显示出来。
注意事项

  • 开运算通常用于消除小的对象,而闭运算用于填补对象内部的小孔或裂缝。
  • 形态学操作对于二值图像特别有效,但也可以应用于灰度图像。
  • 核的大小和形状对形态学操作的结果有重要影响。较大的核会导致更显著的变化,而不同的核形状(如矩形、椭圆形等)会产生不同的效果。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/377977
推荐阅读
相关标签
  

闽ICP备14008679号