OpenCV基础操作之图像的形态学运算

OpenCV基础操作之图像的形态学运算

OpenCV在图像的形态学运算方面都是相较于图像中高亮部分而言,对应的二值化图像就是对白色区域进行膨胀或腐蚀。其主要作用是消除噪音、分割图像、连接图像、图像梯度的求取以及求局部最大值或最小值等。
本文主要是通过简单的实例进行说明,大家可以通过互联网搜索相应的函数进行尝试和学习。

# 获取并显示图像
img = cv2.imread('img/wen.png')

腐蚀操作

腐蚀操作类似于“蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小,通过erode函数对其进行操作。

# 形态学-腐蚀操作 
kernel = np.ones((3,3),np.uint8)# 3*3的卷积核,uint8图像矩阵类型
erosion_1 = cv2.erode(img ,kernel,iterations = 1)# iterations 迭代次数
erosion_2 = cv2.erode(img ,kernel,iterations = 2)
erosion_3 = cv2.erode(img ,kernel,iterations = 3)
res = np.hstack((erosion_1,erosion_2,erosion_3))
cv2.imshow('erosion_1 VS erosion_2 VS erosion_3', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

膨胀操作

膨胀通俗来讲就是对将白色部分在原来的形状上扩大,对黑色部分压缩,通过dilate函数对其进行操作。

dilate_1 = cv2.dilate(img ,kernel,iterations = 1)
dilate_2 = cv2.dilate(img ,kernel,iterations = 2)
dilate_3 = cv2.dilate(img ,kernel,iterations = 3)
res = np.hstack((dilate_1,dilate_2,dilate_3))
cv2.imshow('dilate_1 VS dilate_2 VS dilate_3', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

  • morphologyEx函数利用基本的膨胀和腐蚀技术,来执行更加高级形态学变换,基础语法为morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
    其中值得注意的是,op表示形态学运算的类型:
    • MORPH_OPEN – 开运算(Opening operation)
    • MORPH_CLOSE – 闭运算(Closing operation)
    • MORPH_GRADIENT - 形态学梯度(Morphological gradient)
    • MORPH_TOPHAT - 顶帽(Top hat)
    • MORPH_BLACKHAT - 黑帽(Black hat)

接下来,我们按照morphologyEx函数的不同的形态学运算类型进行实例演示,便于大家更好理解。

开运算

即先腐蚀,再膨胀,一般用于消除细长的突出物,再还原,主要用于将物体分开。

morphologyEx_1 = cv2.morphologyEx(img ,cv2.MORPH_OPEN,kernel)
cv2.imshow('morphologyEx_1', morphologyEx_1)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

闭运算

即先膨胀,再腐蚀,一般用于消除物体内部细小的空隙,用于物体连接,形成闭合整体。

morphologyEx_2 = cv2.morphologyEx(img ,cv2.MORPH_CLOSE,kernel)
cv2.imshow('morphologyEx_2', morphologyEx_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

形态学梯度运算

即梯度 = 膨胀-腐蚀,之所以称为形态学梯度是因为一般的获得边缘方式是通过sobel算子计算梯度获得,而这种获得梯度的方式是通过膨胀减腐蚀获得边缘,是通过形态学操作的方式获得边缘。

# 梯度运算 梯度 = 膨胀-腐蚀
gradient = cv2.morphologyEx(img ,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

礼帽

礼帽= 原始输入-开运算结果,一般用于提取图象中的高亮部分,因为开操作会消除高亮部分,用原图像减去开操作后的图像就会得到高亮部分的图像。

# 礼帽 = 原始输入-开运算结果
tophat = cv2.morphologyEx(img ,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

黑帽

黑帽 = 开运算- 原始输入,一般用于提取低亮部分的图像,因为闭操作会消去细小的低亮部分,用低亮部分的图像减去原图像获得低亮部分的图像。

tophat = cv2.morphologyEx(img ,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
看了本文之后有些同学可能对于概念还比较模糊,大家可以点击OpenCV图像腐蚀和膨胀、开操作、闭操作、形态学梯度、顶帽和黑帽进行更深一步的学习和思考。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值