OpenCv(四)——图像形态学

目录

图像形态学

一、图像腐蚀

二、图像膨胀

三、开运算

四、闭运算

五、梯度运算

六、顶帽运算 

七、黑帽运算


图像形态学

        什么是形态学:图像形态学是一种处理图像形状特征的图像处理技术,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。

一、图像腐蚀

cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像
kernel: 用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。
dst: 它是与src相同大小和类型的输出图像。
iterations:腐蚀操作的迭代次数,默认为1。次数越多, 腐蚀操作执行的次数越多,腐蚀效果越明显

import numpy as np
sun = cv2.imread('sun.png')
cv2.imshow('src',sun)
cv2.waitKey(0)
kernel = np.ones((3,3),np.uint8)  #设置kenenel大小,核改为5*5试试
erosion_1 = cv2.erode(sun,kernel,iterations=1)  #iterations改为5试试
cv2.imshow('erosion_1',erosion_1)
cv2.waitKey(0)

效果:影响腐蚀效果的参数有kernel(核)、iterations(腐蚀的轮数),这两个值都是越大腐蚀效果越强。

 

二、图像膨胀

cv2.dilate(img, kernel, iteration)
参数含义:
img – 目标图片
kernel – 进行操作的内核,默认为3×3的矩阵
iterations – 膨胀次数,默认为1

wenzi = cv2.imread('wenzi.png')
cv2.imshow('src1',wenzi)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)  #设置kenenel大小
wenzi_new = cv2.dilate(wenzi,kernel,iterations=2)
cv2.imshow('wenzi_new',wenzi_new)
cv2.waitKey(0)

效果:影响膨胀效果的参数有kernel(核)、iterations(膨胀的轮数),这两个值都是越大膨胀效果越强。 

 

三、开运算

开运算应用场景,如果图像中存在着很多的细纹或者椒盐噪声点,先腐蚀会将这些噪声点清除掉,在膨胀会加强我们需要的图像的特征。

开运算(cv2.MORPH_OPEN):先腐蚀后膨胀。

zhiwen = cv2.imread('zhiwen.png')
cv2.imshow('src2',zhiwen)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)  #设置kenenel大小
zhiwen_new = cv2.morphologyEx(zhiwen,cv2.MORPH_OPEN,kernel) #开运算
cv2.imshow('zhiwen_new',zhiwen_new)
cv2.waitKey(0)

 

四、闭运算

应用场景:如果希望将一些断断续续的细纹连接起来,则使用闭运算,先将图像膨胀连接起来,再腐蚀使图像恢复原有的特征

闭运算(cv2.MORPH_CLOSE):先膨胀后腐蚀

zhiwen = cv2.imread('zhiwen_duan.png')
cv2.imshow('src3',zhiwen)
cv2.waitKey(0)
kernel = np.ones((4,4),np.uint8)  #设置kenenel大小
zhiwen_new = cv2.morphologyEx(zhiwen,cv2.MORPH_CLOSE,kernel) #闭运算
cv2.imshow('zhiwen_new',zhiwen_new)
cv2.waitKey(0)

 

五、梯度运算

膨胀-腐蚀(cv2.MORPH_GRADIENT)

wenzi = cv2.imread('wenzi.png')
cv2.imshow('wenzi_new',wenzi)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)  #设置kenenel大小
# 膨胀
pz_wenzi=cv2.dilate(wenzi,kernel,iterations=2)
cv2.imshow('pz_wenzi',pz_wenzi)
cv2.waitKey(0)
#腐蚀
fs_wenzi=cv2.erode(wenzi,kernel,iterations=1)
cv2.imshow('fs_wenzi',fs_wenzi)
cv2.waitKey(0)
# 膨胀-腐蚀
bianyuan = cv2.morphologyEx(wenzi,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('bianyuan',bianyuan)
cv2.waitKey(0)

 

六、顶帽运算 

顶帽(cv2.MORPH_TOPHAT) = 原始图像 - 开运算结果(先腐蚀后膨胀)
sun = cv2.imread('sun.png')
cv2.imshow('sun_yuantu',sun)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)  #设置kenenel大小
#开运算
open_sun=cv2.morphologyEx(sun,cv2.MORPH_OPEN,kernel)
cv2.imshow('open_sun',open_sun)
cv2.waitKey(0)
#顶帽
tophat = cv2.morphologyEx(sun,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('TOPHAT',tophat)
cv2.waitKey(0)

 

七、黑帽运算

黑帽(cv2.MORPH_BLACKHAT) = 闭运算(先膨胀后腐蚀) - 原始图像
sun = cv2.imread('sun.png')
cv2.imshow('sun_yuantu',sun)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)  #设置kenenel大小
#闭运算
close_sun=cv2.morphologyEx(sun,cv2.MORPH_CLOSE,kernel)
cv2.imshow('close_sun',close_sun)
cv2.waitKey(0)
#黑帽
blackhat = cv2.morphologyEx(sun,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('BLACKHAT',blackhat)
cv2.waitKey(0)