python-形态学运算

一、腐蚀

"""
腐蚀:
   腐蚀可以将图像的边界点消除,使图像沿着边界向内收敛,也可以将小于指定结构体的部分取出
   dst=cv2.erode(img,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
      img:输入图像,深度必须为CV_8U,CV_16U,CV_16S,CV_32F或者CV_64F中的一种
      dst:输出图像
      kernel:代表腐蚀操作时所采用的结构类型,可以自定义生成,也可以通过函数cv2.getStructuringElement()
      anchor:锚点位置,默认(-1,-1),为核的中心位置
      iterations:腐蚀操作的迭代次数,默认值为1,即只进行一次腐蚀操作
      boderType:边界样式BoderTypes
 """
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('img_2.png',0)
img_gray=(img,cv2.COLOR_BGR2GRAY)
kernel = np.ones((5,5),np.uint8)
erodion = cv2.erode(img,kernel,iterations=1)
img_gray=cv2.cvtColor(erodion,cv2.COLOR_BGR2RGB)
plt.imshow(img_gray)
plt.show()

在这里插入图片描述

二、膨胀

"""
膨胀:与腐蚀相反
     cv2.dilate(img1,kernel,iterations)
"""

# 膨胀
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('clock.png',0)
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(img1,kernel,iterations=1)
img_gray=cv2.cvtColor(dilation,cv2.COLOR_BGR2RGB)
plt.imshow(img_gray)
plt.show()

在这里插入图片描述

三、通用形态学函数

"""
通用形态学函数:
    腐蚀操作和膨胀操作是形态学运算的基础,将腐蚀和膨胀操作进行结合,
    dst=cv2.morphologyEx(img,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
       img:输入图像,深度必须为CV_8U,CV_16U,CV_16S,CV_32F或者CV_64F中的一种
      dst:输出图像
      kernel:代表腐蚀操作时所采用的结构类型,可以自定义生成,也可以通过函数cv2.getStructuringElement()
      anchor:锚点位置,默认(-1,-1),为核的中心位置
      iterations:腐蚀操作的迭代次数,默认值为1,即只进行一次腐蚀操作
      boderType:边界样式BoderTypes
 """

1.开运算

"""
开运算:先腐蚀后膨胀,可以实现去噪
   cv2.MORPH_OPEN: 等价于dst=open(img,element)=dilate(erode(img,element))
 """
 # 开运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
imgRGB=cv2.cvtColor(open,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('open')
plt.show()

在这里插入图片描述

2.闭运算

"""
闭运算:先膨胀后腐蚀,可以关闭前景物体内的小孔,除去物体上的小黑点,还可以将不同的前景图像连接
   cv2.MORPH_CLOSE: dst=close(img,element)=erode(dilate(img,element))
  """
 # 闭运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
imgRGB=cv2.cvtColor(close,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('close')
plt.show()

在这里插入图片描述

3.梯度运算

"""
梯度运算
    cv2.MORPH_GRADIENT:等价于dst=morph_grad(img,element)=dilate(img,element)-erode(img,element)
"""
# 梯度运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
imgRGB=cv2.cvtColor(gradient,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('gradient')
plt.show()

在这里插入图片描述

3.礼帽运算

"""
礼帽运算:
    cv2.MORPH_TOPHAT:等价于dst=tophat(img,element)=img-open(img,element)
"""
# 礼帽运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
imgRGB=cv2.cvtColor(tophat,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('tophat')
plt.show()

在这里插入图片描述

4.黑帽运算

"""
黑帽运算:
   cv2.MORPH_BLACKHAT:等价于dst=blackhat(img,element)=close(img,element)-img
"""
# 黑帽运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
imgRGB=cv2.cvtColor(blackhat,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('blackhat')
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值