OpenCV-Python图像模糊处理

蔚落 2022-09-16 13:27 264阅读 0赞

其实我们平时在深度学习中所说的卷积操作,在 opencv 中也可以进行,或者说是类似操作。那么它是什么操作呢?它就是图像的模糊(滤波)处理。

均值滤波

使用 opencv 中的cv2.blur(src, ksize)函数。其参数说明是:

  • src: 原图像
  • ksize: 模糊核大小

原理:它只取内核区域下所有像素的平均值并替换中心元素。3x3 标准化的盒式过滤器如下所示:

3×3标准过滤器

  • 特征:核中区域贡献率相同。
  • 作用:对于椒盐噪声的滤除效果比较好。

    --coding:utf-8--

    “””
    File Name: image_deeplearning.py
    Program IDE: PyCharm
    Date: 2021/10/17
    Create File By Author: Hong
    “””
    import cv2 as cv

  1. def image_blur(image_path: str):
  2. """
  3. 图像卷积操作:设置卷积核大小,步距
  4. :param image_path:
  5. :return:
  6. """
  7. img = cv.imread(image_path, cv.IMREAD_COLOR)
  8. cv.imshow('input', img)
  9. # 模糊操作(类似卷积),第二个参数ksize是设置模糊内核大小
  10. result = cv.blur(img, (5, 5))
  11. cv.imshow('result', result)
  12. cv.waitKey(0)
  13. cv.destroyAllWindows()
  14. if __name__ == '__main__':
  15. path = 'images/2.png'
  16. image_blur(path)

结果展示:

均值滤波

高斯滤波

高斯滤波使用的是cv2.GuassianBlur(img, ksize,sigmaX,sigmaY)函数。

说明:sigmaX,sigmaY分别表示 X,Y 方向的标准偏差。如果仅指定了sigmaX,则sigmaYsigmaX相同;如果两者都为零,则根据内核大小计算它们。

  • 特征:核中区域贡献率与距离区域中心成正比,权重与高斯分布相关。
  • 作用:高斯模糊在从图像中去除高斯噪声方面非常有效。

    def image_conv(image_path: str):

    1. """
    2. 高斯模糊
    3. :param image_path:
    4. :return:
    5. """
    6. img = cv.imread(image_path, cv.IMREAD_COLOR)
    7. cv.imshow('img', img)
    8. # 高斯卷积(高斯滤波), 可以设置ksize,必须为奇数,不为0时,后面的步骤不起作用;也可以设置成(0,0),然后通过sigmaX和sigmaY计算标准偏差
    9. result = cv.GaussianBlur(img, (0, 0), 15)
    10. cv.imshow('result', result)
    11. cv.waitKey(0)
    12. cv.destroyAllWindows()
  1. if __name__ == '__main__':
  2. path = 'images/2.png'
  3. image_conv(path)

结果展示:

高斯滤波

高斯双边滤波

双边滤波(模糊)使用的是cv2.bilateralFilter(img,d, sigmaColor, sigmaSpace)函数。

说明:d为邻域直径,sigmaColor为空间高斯函数标准差,参数越大,临近像素将会在越远的地方越小。

sigmaSpace灰度值相似性高斯函数标准差,参数越大,那些颜色足够相近的的颜色的影响越大。

双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。

  • 特征:处理耗时。
  • 作用:在滤波的同时能保证一定的边缘信息。

    边缘保留滤波器——高斯双边模糊

    def image_bifilter(image_path: str):

    1. """
    2. 高斯双边模糊
    3. :param image_path: 图片文件
    4. :return: 无返回值
    5. """
    6. img = cv.imread(image_path, cv.IMREAD_COLOR)
    7. cv.imshow('input', img)
    8. # 第三个参数是设置色彩、第四个参数是设置图像坐标
    9. result = cv.bilateralFilter(img, 0, 50, 10)
    10. cv.imshow('result', result)
    11. cv.waitKey(0)
    12. cv.destroyAllWindows()
  1. if __name__ == '__main__':
  2. path = 'images/2.png'
  3. image_bifilter(path)

结果展示:

双边滤波

获取更多计算机视觉内容,请关注微信公众号 ”AI 与计算机视觉“。

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读

    相关 OpenCV图像模糊图像平滑)

    使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界

    相关 图像求导及模糊

    在很多应用中,图像强度的变化情况是非常重要的信息。强度的变化可以灰度图像的\\(x\\)和\\(y\\)方向导数\\(I\_x\\)和\\(I\_y\\)进行描述。图像的梯度向

    相关 OpenCV java 图像基本处理-模糊 (8)

    其实我们知道支付宝在支付的时候有人脸识别操作,我们在第一次开通的时候,需要我们人脸的认证操作,需要我们露脸,在手机的摄像头面前摇摇头,眨眨眼。其实这个过程是属于特征提取的过程,

    相关 OpenCV-Python图像模糊处理

    其实我们平时在深度学习中所说的卷积操作,在 opencv 中也可以进行,或者说是类似操作。那么它是什么操作呢?它就是图像的[模糊(滤波)处理][Link 1]。 均值滤波