形态学滤波—腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽

形态学操作是根据图像形状(一般为二值化图像,即黑白图像)进行的简单操作,最基本的两个就是腐蚀与膨胀。

腐蚀:求局部最小值的操作。从数学角度看,腐蚀就是将图像(或者图像的一部分)与卷积核进行卷积。卷积核与图像卷积,即计算核覆盖区域像素的最小值,并把这个最小值赋值给参考点指定的像素。所以整幅图的高亮区域逐渐减少。

作用:这对于去除白噪声很有用,也可以用来断开连接在一起的物体。

函数:cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
参数含义:src:处理的图像,kernel:卷积核,其他参数都有默认值,一般不用管。

kernel参数一般配合getStructuringElement函数来使用。详细介绍请点击下方链接:结构化元素(卷积核的设置)

膨胀:与腐蚀相反,膨胀是求局部最大值的操作。所以膨胀会增加图像中的白色区域。在去噪时一般先用腐蚀,再用膨胀。膨胀也可以用来连接两个分割的物体。

函数:cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

开运算:先腐蚀在膨胀,被用来去除噪声。
函数:cv2.morphologyEx(src, op=cv2.MORPH_OPEN , kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
参数含义:op表示形态学运算的类型,当op=cv2.MORPH_OPEN 时,就执行开运算。

具体选择如下:

标识符 含义
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_GRADIENT 形态学梯度
MORPH_TOPHAT 礼帽
MORPH_BLACKHAT 黑帽

闭运算:先膨胀后腐蚀,能够排除小型黑洞。

函数:cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

形态学梯度:膨胀图与腐蚀图之差,一般用来保留物体的轮廓边缘。

函数:cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

礼帽(顶帽):原始图像与开运算之后得到的图像之差。它常常用来分离比邻近点亮一点的斑块。
函数:cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

黑帽:原始图像与闭运算之后得到的图像之差。它常常用来分离比邻近点暗一点的斑块。
函数:cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread('../002.jpg',0)  #0是灰度图,默认是三通道彩色图像

#方框滤波
blur1=cv2.boxFilter(img,-1,(5,5),normalize=False)

#均值滤波
blur2=cv2.blur(img,(5,5))

#高斯滤波
blur3=cv2.GaussianBlur(img,(5,5),0)

#中值滤波
blur4=cv2.medianBlur(img,5)

#双边滤波
blur5=cv2.bilateralFilter(img,9,75,75)

images=[img,blur1,blur2,blur3,blur4,blur5]

titles=['img',"blur1",'blur2',"blur3","blur4","blur5"]
for i in range(6):
    plt.subplot(3,2,i+1)
    plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    # 给坐标轴赋值,这里赋值为空
    plt.xticks([])
    plt.yticks([])
plt.show()

形态学滤波—腐蚀,膨胀,开运算,闭运算,形态学梯度,礼帽,黑帽_第1张图片

你可能感兴趣的:(OpenCV学习笔记,卷积,opencv,python)