【opencv】(3) 图像滤波:均值、方框、中值、高斯

内容有: 均值滤波 cv2.blur(),方框滤波 cv2.boxFilter(),高斯滤波 cv2.GaussianBlur(),中值滤波 cv2.medianBlur()


滤波可理解为,平均卷积操作。对于图像上存在的噪声点,通过滤波平滑处理操作,可以去除噪声点。在开始前我们先导入需要用的库文件,获取需要用到的图片。

import cv2
# 指定图像所在文件夹位置
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\opencv\\img'
# 获取文件夹中某张图像
img = cv2.imread(filepath+'\\lina.jpg')
# 显示图像
cv2.imshow('img',img) # (自定义窗口名,图象变量)
cv2.waitKey(0) # 图像不会自动消失
cv2.destoryAllWindows() # 按下任意键图像消失

1. 均值滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;对卷积核内的所有像素值求平均,将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

方法:cv2.blur(img, ksize)

img表示图像变量;ksize表示卷积核大小(n,n),卷积核是值全为1的矩阵

#(1)均值滤波
# 参数:输入的图像数据,卷积核大小,即滑窗的宽和高,一般用奇数
blur = cv2.blur(img,(3,3))
# 显示图像
cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destoryAllWindows()

  


2. 方框滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;方框滤波有2种方法(1)将卷积核内所有像素值相加,超过255的像素值变成255(2)对卷积核内的所有像素值求平均将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

如果方框滤波使用第2种方法得到的结果和均值滤波的结果一样。

滤波函数: cv2.boxFilter(img, -1, ksize, normalize)

img代表输入图像;-1代表得到的结果在颜色通道上是一致的,一般不用改;ksize代表卷积核大小;normalize代表是否归一化,如果为True,得到的结果同均值滤波。

#(2)方框滤波
# 卷积核3*3
box = cv2.boxFilter(img,-1,(3,3),normalize=True)
# 显示图像
cv2.imshow('box',box)
cv2.waitKey(0)
cv2.destoryAllWindows()

下图左侧是normalize=False的图像,右侧是normalize=True的图像

  


3. 高斯滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;卷积核内的权重值服从高斯分布,离中心点越近的点权值越大。将卷积核内各值与相应像素值做内积,将乘积相加后求平均,将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

滤波方法: cv2.GaussianBlur(img, ksize, 标准差x, 标准差y)

img代表输入图像;ksize卷积核大小,滑窗宽度高度为奇数;标准差x代表沿x方向的卷积核的标准差;标准差y代表沿y方向的卷积核的标准差,不设置的话则和x轴的标准差一致

# 输入图像,卷积核大小,沿x轴方向的标准差=1,沿y轴标准差不设置的话和沿x轴一样
aussian = cv2.GaussianBlur(img, (5,5), 1)
# 显示图像
cv2.imshow('aussian',aussian)
cv2.waitKey(0)
cv2.destoryAllWindows()

下图左侧为原图,右侧为高斯滤波后的图

  


4. 中值滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;被卷积核框住的像素值从小到大排序,取中间大小的像素值代替滑窗中最中间的值。将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

滤波方法: cv2.medianBlur(img, ksize)

img代表输入的图像,ksize代表滤波模板的尺寸大小,填一个数值,必须是大于1的奇数

#(4)中值滤波
median = cv2.medianBlur(img,5) # 用5*5的卷积核去做滑窗,排序后,取中间那个值
# 显示图像
cv2.imshow('median',median)
cv2.waitKey(0)
cv2.destoryAllWindows()

下图左侧为原图,右侧为滤波后的图像。可以看出,中值滤波对处理椒盐噪声具有很好的效果。

  


最后我们来把这三种滤波(均值、高斯、中值)图像放在一起看一下

#(5)一个窗口显示多个图像
# np.hstack()表示沿着横向堆叠
# np.vstack()表示沿着纵向堆叠
# 参数应该为一个元组
import numpy as np
res = np.hstack((blur,aussian,median))
# 图像显示
cv2.imshow('result',res)
cv2.waitKey(0)
cv2.destoryAllWindows()

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值