【opencv】Python-OpenCV图像形态学运算-自学笔记

前言:本文是我在学习opencv时记录的笔记,内容较为简洁,会记录从入门到做项目这段时间的内容,最终目的是完成我的毕业设计,欢迎大家给予批评指正。本篇为《学习OpenCV》和《Python-OpenCV从入门到精通》中有关图像形态学的笔记。

1.腐蚀与膨胀

膨胀是指将一些图像A与核B进行卷积,即计算核B覆盖区域的像素点最大值,并把这个最大值赋给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长。
腐蚀是膨胀的反操作,即计算核B区域像素的最小值,并把这个值放到参考点上。
腐蚀:dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
膨胀:dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
src:原始图像
kernel:核
anchor:核的锚点位置;
iterations:迭代次数,默认为1;
borderType:边界样式,默认值;
borderValue:边界值,默认值;
dst:腐蚀或膨胀后的图像。

在做形态学操作时,通常使用numpy模块来创建核数组作为核参数,例如:

import numpy as np
k = np.ones((5, 5), np.uint8)

其中,数组数值越大,计算出的效果就越粗糙。

例:对仙人掌进行腐蚀和膨胀操作:

import cv2
import numpy as np

img = cv2.imread("D:/1a.study/opencv/Python OpenCV/sl/12/01/cactus.jpg")
k = np.ones((5, 5), np.uint8)
cv2.imshow("img", img)
dst1 = cv2.erode(img, k)
dst2 = cv2.dilate(img, k)
cv2.imshow("erode", dst1)
cv2.imshow("dilate", dst2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

2.开运算与闭运算

开运算是将图像先进行腐蚀操作,再进行膨胀操作,可以用来抹除图像的外部细节或噪声。
在这里插入图片描述
闭运算是将图像先进行膨胀操作,再进行腐蚀操作,用来去除图像的内部细节或噪声引起的区域。
在这里插入图片描述
对于连通区域分析,通常先采用腐蚀或闭运算来消除纯粹由噪声引起的部分,然后用开运算来连接邻近的区域。

3.形态学梯度

gradient(src) = dilate(src) - erode(src)
在这里插入图片描述
形态学梯度操作是用原图像的膨胀操作减去原图像的腐蚀操作,能描述图像亮度变化的剧烈程度,当我们想突出高亮区域的外围时,可以使用此操作。

4.形态学运算

dst = cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)
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:核的锚点位置;
iterations:迭代次数,默认为1;
borderType:边界样式,默认值;
borderValue:边界值,默认值;
dst:操作后的图像。

例如梯度运算,最后得到了原图的大概轮廓:

k = np.ones((5, 5), np.uint8)
dst3 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k)

在这里插入图片描述

5.顶帽运算与黑帽运算

顶帽运算是让原图减去原图的开运算图,黑帽运算是让原图的闭运算图减去原图,当试图孤立的部分相对于其临近的部分有亮度变化时,就可以使用此方法。
在这里插入图片描述
顶帽运算可以突出比试图孤立部分的周围更明亮的区域。因为开运算抹除了图像的外部细节,用有外部细节的图减去无外部细节的图,得到的结果就只剩外部细节。
黑帽运算可以突出比试图孤立部分的周围更黑暗的区域。因为闭运算抹除了图像的内部细节,用无内部细节的图减去有内部细节的图,得到的结果就只剩内部细节。

例如:

k = np.ones((5, 5), np.uint8)
dst3 = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k) # 顶帽
dst4 = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k) # 黑帽

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值