各位同学好,今天和大家分享一下图像的形态学处理方法。内容有:

膨胀腐蚀、开运算和闭运算、梯度运算、礼帽和黑帽

(1)腐蚀:cv2.erode();(2)膨胀:cv2.dilate();(3)形态学函数:cv2.morphologyEx();

那我们开始吧。


我们先导入接下来操作需要的库文件和图像数据

import cv2
import numpy as np
# 指定图片所在文件夹
filepath = 'C:\\...\\img\\changed'
# 获取文件夹中的某张图
img = cv2.imread(filepath+'\\wiseman.jpg')
# 显示图片
cv2.imshow('wiseman',img)
cv2.waitKey(0) # 设置图片不会自动消失
cv2.destroyAllWindows()  # 任意键关闭图像

1. 腐蚀操作

腐蚀操作,一般处理二值化图像,黑白图像,白色区域减少。简单理解为,卷积核在图像上移动的过程中,如果卷积核所框住的部分全为黑或全为白,图像不变;如果既有黑又有白,那么按一定策略将白变黑。

腐蚀函数: cv2.erode(img, kernel, iterations)

img为输入的图像。kernel为卷积核大小,卷积核越小,腐蚀越慢,需要的迭代次数越多。
iterations为迭代次数。iterations=2,表示在完成第一次腐蚀的结果图像上再进行腐蚀。

# 5*5的全1卷积核;uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255
kernel = np.ones((5,5),np.uint8)
# 参数为:输入图像,卷积核,迭代次数=1
img2 = cv2.erode(img, kernel, iterations=1)
# 显示图片
cv2.imshow('wiseman2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()  

下图左侧为原图,右图为腐蚀后的图

            


2. 膨胀操作 

膨胀操作,一般处理二值化图像,白色区域增大。和腐蚀相反,卷积核在图像上移动的过程中,如果既有黑又有白,那么按一定策略将黑变白。

腐蚀函数: cv2.dilate(img, kernel, iterations)

参数同上,img为输入的图像。kernel为卷积核大小。iterations为迭代次数。

#(2)膨胀操作
# 设置卷积核3*3全1
kernel = np.ones((3,3),np.uint8)
# 传入图像,卷积核,迭代次数
img3 = cv2.dilate(img, kernel, iterations=1)
# 显示图片
cv2.imshow('wiseman3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()  

下图左侧为原图,右图为膨胀后的图

          


3. 形态学函数

cv2.morphologyEx(img, op, kernel)

img代表输入图像;kernel代表卷积核;op代表形态学处理参数,如下

MORPH_ERODE腐蚀(黑变多),与腐蚀函数cv2.erode效果相同

MORPH_DILATE膨胀(白变多),与膨胀函数cv2.dilate效果相同

MORPH_OPEN开运算,先腐蚀后膨胀。平滑边界,去除凸起,移除小白点

MORPH_CLOSE闭运算,先膨胀再腐蚀。填充图像内部小黑洞,填充图像凹陷

MORPH_GRADIENT梯度计算,用膨胀图减腐蚀图。获得图像的边缘轮廓

MORPH_TOPHAT礼帽,用原图像减去开运算后的图像。获得原图像中比周围亮的区域

MORPH_BLACKHAT黑帽,闭运算图像减去原图像。获取原图像中比周围暗的区域


4. 开运算

先腐蚀后膨胀,白色区域先变小后扩张,平滑边界(去掉凸起)、移除白点

cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

#(3)开运算:先腐蚀后膨胀
# 定义卷积核
kernel = np.ones((3,3),np.uint8)
# 形态学函数:图像,开运算,卷积核
img4 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 显示图片
cv2.imshow('opening',img4)
cv2.waitKey(0)
cv2.destroyAllWindows()  

效果图在下面。


5. 闭运算

先膨胀后腐蚀,白色区域先变大后缩小,闭运算用于填充图像内部的小黑洞、填充图像的凹陷等,排除小黑洞,连接被误分为许多小块的对象

#(4)闭运算:先膨胀后腐蚀
# 定义卷积核
kernel = np.ones((3,3),np.uint8)
# 形态学函数:图像,闭运算,卷积核
img4 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# 显示图片
cv2.imshow('closing',img4)
cv2.waitKey(0)
cv2.destroyAllWindows()  

第一张为原图,第二张为开运算,第三张为闭运算


6. 梯度计算

梯度图,用膨胀图减腐蚀图。可以用于获得图像中物体的轮廓,可以突出团块的边缘,保留物体的边缘轮廓。

# ==2== 梯度运算,膨胀图像减去腐蚀图像,得到轮廓信息
# 卷积核
kernel = np.ones((3,3),np.uint8)
# 形态学处理函数,输入图像,梯度计算参数,卷积核
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 绘图,查看边界信息
cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destoryAllWindows()

下图第一张是膨胀图像,第二张是腐蚀图像,第三张是梯度图


7. 礼帽

礼帽 = 原始输入 - 开运算结果

可以用于获得原图像中比周围亮的区域,去除白色重叠部分

# ==1== 礼帽
# 获取图像
img = cv2.imread(filepath+'\\wiseman.jpg')
# 卷积核
kernel = np.ones((8,8),np.uint8)
# 形态学处理函数,输入图像,梯度计算参数,卷积核
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# 绘图,查看边界信息
cv2.imshow('tophat',tophat)
cv2.waitKey(0)
cv2.destoryAllWindows()

第一张为原图,第二张为开运算,第三张是礼帽


8. 黑帽

黑帽 = 闭运算-原始输入

可以用于获取原图像中比周围暗的区域,保留白色重叠部分

# ==2== 黑帽
# 获取图像
img = cv2.imread(filepath+'\\wiseman.jpg')
# 卷积核
kernel = np.ones((8,8),np.uint8)
# 形态学处理函数,输入图像,梯度计算参数,卷积核
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
# 绘图,查看边界信息
cv2.imshow('blackhat',blackhat)
cv2.waitKey(0)
cv2.destoryAllWindows()

第一张是闭运算,第二张是原图,第三张是黑帽

【opencv】(4) 形态学处理:腐蚀膨胀、梯度运算、礼帽黑帽相关推荐

  1. 形态学上的图像顶帽运算和黑帽运算是什么?

    作者 | 杨秀璋 责编 | 夕颜 出品 | CSDN博客 数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论.其 ...

  2. Halcon中的基于区域的形态学处理(腐蚀膨胀开闭预算顶底帽运算)

    形态学处理的作用: 用于提取有意义的局部图像细节,通过改变局部区域的像素形态,对图像进行增强,为后续分割.特征提取.边缘检测做准备. 在开始之前,我们先了解一下:结构元素:StructElement ...

  3. [图像形态学操作]——腐蚀和膨胀、开闭运算、黑帽礼帽

    形态学转换是基于图像形状的一些简单操作,它通常在二进制图像上执行.腐蚀和膨胀是两个基本的形态学运算符.然后它的变体形式如:开运算.闭运算.礼帽黑帽等. 一.连通性 在图像学当中,图像的最小单位是像素, ...

  4. [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  5. opencv 实现图像形态学操作 膨胀和腐蚀 开闭运算 形态学梯度 顶帽和黑帽

    图像膨胀和腐蚀 图解 原理及python实现 更多内容:图像膨胀和腐蚀原理及python实现 opencv中膨胀和腐蚀函数 dilation = cv.dilate(img, kernel) # 膨胀 ...

  6. opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

    Morphological Transformations 1图像腐蚀 腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色):内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时 ...

  7. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  8. 开运算和闭运算_OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)...

    Fly-AI竞赛服务平台 flyai.com 在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站 ...

  9. OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()

    OpenCV学习笔记(八):形态学morpholgy(2):开.闭运算,形态学梯度.顶帽.黑帽:morphologyEx() 数学形态学(Mathematical morphology) 是一门建立在 ...

最新文章

  1. C#“.NET研究”类类型
  2. 把广告带进虚拟世界实现低成本开发,Anzu.io开始内测报名
  3. Java学习笔记之static
  4. 微博上的网红,为什么更能红得发紫?
  5. 【转】你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
  6. HBase中的HMaster、HRegionServer、Zookeeper
  7. chrome 调试 ios h5
  8. 乘风破浪,遇见未来新能源汽车(Electric Vehicle)之特斯拉提车必须知道的十个流程
  9. LibSass 的二进制文件(P:\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\vendor\win32-ia32
  10. ios dat 文件读写_玩转你的iphone, IOS 13 NFC标签读写详细步骤
  11. 分享146个培训课件PPT模板,总有一款适合你
  12. convertTo函数的用法
  13. 鸿蒙支持ps4手柄吗,PS5硬件兼容性测试:哪些PS4硬件可以在PS5上使用
  14. html css绘制24色环图,HTML5 色环钟表
  15. [科普文] 搞 Web3 要学习哪些基础知识?
  16. 解决宏碁5750g ubuntu无法调整和保存屏幕亮度的问题
  17. dubbo源码分析23 -- provider 接收与发送原理
  18. 郑捷《机器学习算法原理与编程实践》学习笔记(第五章 梯度寻优)5.2 Logistic梯度下降法...
  19. Quorum快速部署
  20. 分享平面设计中的视觉思维(技巧实战篇)

热门文章

  1. Android 侧滑栏 (DrawerLayout)
  2. 一位资深Java架构师的晋级心得
  3. leetcode-20 valid-parentheses(有效的括号)
  4. 用python创建一个目录
  5. 构造方法与setXxx方法
  6. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
  7. NTP时间同步服务器搭建
  8. C# GDI+ 简单绘图 (三)
  9. UVA 10714 - Ants
  10. BaseTDI.sys 瑞星卡巴冲突,导致机器蓝屏