天天看点

python opencv中值滤波_opencv-python图像预处理-滤波

为了消除外界环境对图像采集的干扰,增强图像的边缘及灰度跳变的部分,使图像变得清晰以及提高图像处理速度需要对图像进行预处理操作,主要是对图像进行滤波和增强操作。

使用的方法可以分为空间域处理和频率域处理两类。

空间域指图像平面本身,这类图像处理方法用各种模板直接与图像进行卷积运算,实现对图像的处理。

频率域是指从函数的频率角度出发分析函数,对图像进行傅里叶变换可以将图像由图像空间转换到频域空间,然后在频率域中对图像的频谱作分析处理,以改变图像的频率特征。

空间域与频率域是两种不同的技术,都可以实现对图像的滤波、增强,只是有些处理方式更适合在空间域完成,而有些则更适合在频率域中完成。

频率域的理解、使用还是很很困难的,需要深厚的数学功底,我也不是特别明白,以后的示例主要是图像在空间域的处理。

图像滤波(模糊)

滤波也叫模糊,下面是opencv中常见的五种滤波方法,先看一下滤波前后的效果。

python opencv中值滤波_opencv-python图像预处理-滤波

# -*- coding: utf-8 -*-

"""

运行环境 python==3.6 opencv-contrib-python== 4.1 win10系统

第一行 “ # -*- coding: utf-8 -*- ” 告诉Python解释器,按照UTF-8编码读取源代码

"""

dir1="lena.jpg"

img1=cv2.imread(dir1) #读入图片

#

#2D滤波 ,2D卷积就是自定义构造一个核

#构建一个卷积核5*5

kernel=np.ones((5,5),np.float32)/25 # 除以25是防止数值溢出

filter2D=cv2.filter2D(img1,-1,kernel)

cv2.imshow("filter2D", filter2D)

#

#中值模糊

#中值滤波法是一种非线性平滑技术,对椒盐噪声有很好的去燥效果

medianBlur=cv2.medianBlur(img1,5)

cv2.imshow("medianBlur", medianBlur)

#

#均值模糊

#均值滤波是典型的线性滤波算法,去随机噪声有很好的去噪效果

#dst=cv2.blur(img1, (1, 5)) #(1, 15)是垂直方向模糊,(15, 1)还水平方向模糊

#dst=cv2.blur(img1, (5, 1)) #(1, 15)是垂直方向模糊,(15, 1)还水平方向模糊

blur=cv2.blur(dst,(5,5)) #两个方向模糊

cv2.imshow("blur", blur)

#

#高斯模糊

#保留图像的主要特征 轮廓 高斯模糊比均值模糊去噪效果好

GaussianBlur=cv2.GaussianBlur(img1,(5,5),0)

cv2.imshow("GaussianBlur", GaussianBlur)

#

#双边滤波 ,保留边缘

# Python: cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst

#src:输入图像

#d:过滤时周围每个像素领域的直径

#sigmaColor:在color space中过滤sigma。参数越大,临近像素将会在越远的地方mix。

#sigmaSpace:在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。

bilateralFilter = cv2.bilateralFilter(img1,13,75,75)

cv2.imshow("bilateralFilter", bilateralFilter)

#

cv2.waitKey(0)

cv2.destroyAllWindows()

滤波方法还有很多,具体选择哪种方法要根据实际图像确定,参数需要不断的调整,滤波效果好的图像,有利于后续的图像处理。