CV的形态学

© Fu Xianjun. All Rights Reserved. 今天小赵带大家进入openCV第五章内容的形态学,案例来自我们辛勤的小傅老师,图片素材都是他自己手绘的。


前言

形态学就是对图像进行一些操作,主要目的依然脱不开为了 提取RIO区域,


提示:以下是本篇文章正文内容,下面案例可供参考

一、形态学是什么?

就是让图像的某些区域发生一些变化如膨胀,腐蚀,礼帽,黑帽运算等等。


二、形态学的实现

1.导包

代码:

import cv2
import numpy as np

2.腐蚀操作

代码如下:

img=cv2.imread('j1.bmp',0)
kernel=np.ones((7,7),np.uint8)   # 滤波和,越大核心腐蚀的越多
ErodeImg=cv2.erode(img,kernel)     #腐蚀,消除多余的部分,使内容核心部分缩放
cv2.imshow('ErodeImg',ErodeImg)
cv2.waitKey()
cv2.destroyAllWindows()

代码效果如下:在这里插入图片描述
我们可以看到小刺消失了

3.膨胀操作

代码如下(示例):

img=cv2.imread('j1.bmp',0) # 这里使用0是为了方便图像处理减少负荷
kernel=np.ones((7,7),np.uint8)
DilateImg=cv2.dilate(img,kernel)   #膨胀,想图像中的前景部分,细节放大,边缘点也可以膨胀
cv2.imshow('yuantu',img)
cv2.imshow('DilateImg',DilateImg)
cv2.waitKey()
cv2.destroyAllWindows()

`代码效果如下:在这里插入图片描述
我们可以看到小刺更粗了,ROI区域也被放大了

4.开运算操作

代码如下(示例):

img=cv2.imread('j.bmp',0)
kernel=np.ones((7,7),np.uint8)
OpenImg=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) #开运算 先腐蚀先把多余的部分不要的给先腐蚀,在膨胀,只要核心内容
cv2.imshow('yuantu',img)
cv2.imshow('OpenImg',OpenImg)
cv2.waitKey()
cv2.destroyAllWindows()

`代码效果如下:
在这里插入图片描述

5.闭运算操作

代码如下(示例):

img=cv2.imread('j.bmp',0)
kernel=np.ones((7,7),np.uint8)
CloseImg=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)#闭运算 先膨胀后腐蚀 填充小孔洞,关闭前景图像内部的小孔洞,还可以链接图片
cv2.imshow('yuantu',img)
cv2.imshow('CloseImg',CloseImg)
cv2.waitKey()
cv2.destroyAllWindows()

`代码效果如下:

在这里插入图片描述

6.礼帽操作

代码如下(示例):

img=cv2.imread('j1.bmp',0)
kernel=np.ones((7,7),np.uint8)
ErodeImg=cv2.erode(img,kernel)
DilateImg=cv2.dilate(ErodeImg,kernel)
LiMao=img-DilateImg
Result=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) #礼帽运算  拿原始图像减去开运算(核心内容),剩下得只有核心内容之外感兴趣内容之
                            #内得东西了
cv2.imshow('yuantu',img)
cv2.imshow('Result',Result)
cv2.waitKey()
cv2.destroyAllWindows()

`代码效果如下:

在这里插入图片描述

7.黑帽操作

代码如下(示例):

img=cv2.imread('j.bmp',0)
kernel=np.ones((7,7),np.uint8)
DilateImg=cv2.dilate(img,kernel)
ErodeImg=cv2.erode(DilateImg,kernel)
HeiMao=img-ErodeImg
Result1=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)#黑帽运算  拿闭运算以后的图减去原图,剩下得只有小黑点了
cv2.imshow('yuantu',img)
cv2.imshow('Result1',Result1)
cv2.waitKey()
cv2.destroyAllWindows()

`代码效果如下:

在这里插入图片描述


三、形态学的应用

3.1取消文中不想要的字

代码如下

import cv2
import numpy as np
img=cv2.imread('morph_task.png',0)
cv2.imshow('yuantu',img)
binary=cv2.threshold(img,200,255,0)[1]  #将原图中不大于200像素的像素点不变,大于的位置变成255
cv2.imshow('binary',binary)
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(15,1))  #返回形态学所使用的结构元素(矩形),长为15宽为1
DilateImg=cv2.dilate(binary,kernel) #将阈值改变后核心内容变成0的图,然后用核函数扫他之后膨胀,核函数扫
                                    #不进去的就会消失掉
cv2.imshow('yuantu',img)
cv2.imshow('DilateImg',DilateImg)
cv2.waitKey()
cv2.destroyAllWindows()

代码效果如下
在这里插入图片描述

总结

提示:这里对文章进行总结:
形态学的操作也是很好玩的大家都可以找图尝试玩玩看,感兴趣一起探讨一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值