opencv(十)---图像平滑

目标


• 学习使用不同的低通滤波器对图像进行模糊

• 使用自定义的滤波器对图像进行卷积(2D 卷积)

与信号一样,我们也可以对2D 图像实施低通滤波(LPF),高通滤波
(HPF)等。LPF 帮助我们去除噪音,模糊图像。HPF 帮助我们找到图像的边
缘,OpenCV 提供的函数cv.filter2D() 可以让我们对一幅图像进行卷积操
作。下面我们将对一幅图像使用平均滤波器。下面是一个5x5 的平均滤波器核:
操作如下:将核放在图像的一个像素A 上,求与核对应的图像上25(5x5)
个像素的和,在取平均数,用这个平均数替代像素A 的值。重复以上操作直到
将图像的每一个像素值都更新一边。代码如下,运行一下吧。

1:卷积

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('wode.jpg')
kernel = np.ones((5,5),np.float32)/25
#cv.Filter2D(src, dst, kernel, anchor=(-1, -1))
#ddepth –desired depth of the destination image;
#if it is negative, it will be the same as src.depth();
#the following combinations of src.depth() and ddepth are supported:
#src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F
#src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F
#src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F
#src.depth() = CV_64F, ddepth = -1/CV_64F
#when ddepth=-1, the output image will have the same depth as the source.
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()


2:平均


这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平
均值来代替中心元素。可以使用函数cv2.blur() 和cv2.boxFilter() 来完
这个任务。可以同看查看文档了解更多卷积框的细节。我们需要设定卷积框的
宽和高。下面是一个3x3 的归一化卷积框:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv_logo.png')
blur = cv2.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()


3:高斯模糊

现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是
相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据
距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求
加权平均数,全就是方框里的值)。实现的函数是cv2.GaussianBlur()。我
们需要指定高斯核的宽和高(必须是奇数)。以及高斯函数沿X,Y 方向的标准
差。如果我们只指定了X 方向的的标准差,Y 方向也会取相同值。如果两个标
准差都是0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从
图像中去除高斯噪音。
如果你愿意的话,你也可以使用函数cv2.getGaussianKernel() 自己
构建一个高斯核。
如果要使用高斯模糊的话,上边的代码应该写成:
             #0 是指根据窗口大小(5,5)来计算高斯函数标准差
                     blur = cv2.GaussianBlur(img,(5,5),0)

还有中值模糊,双边滤波等,这里就不说了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值