Python OpenCV图像模糊处理介绍

 更新时间:2022年01月10日 16:11:53   作者:Hong_Youth  
大家好,本篇文章主要讲的是Python OpenCV图像模糊处理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

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

均值滤波

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

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

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

OpenCV-Python图像模糊处理_opencv

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

# -*-coding:utf-8-*-
"""
File Name: image_deeplearning.py
Program IDE: PyCharm
Date: 2021/10/17
Create File By Author: Hong
"""
import cv2 as cv


def image_blur(image_path: str):
    """
    图像卷积操作:设置卷积核大小,步距
    :param image_path:
    :return:
    """
    img = cv.imread(image_path, cv.IMREAD_COLOR)
    cv.imshow('input', img)
    # 模糊操作(类似卷积),第二个参数ksize是设置模糊内核大小
    result = cv.blur(img, (5, 5))
    cv.imshow('result', result)

    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/2.png'
    image_blur(path)

结果展示:

OpenCV-Python图像模糊处理_opencv_02

高斯滤波

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

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

特征:核中区域贡献率与距离区域中心成正比,权重与高斯分布相关。

作用:高斯模糊在从图像中去除高斯噪声方面非常有效。

def image_conv(image_path: str):
    """
    高斯模糊
    :param image_path:
    :return:
    """
    img = cv.imread(image_path, cv.IMREAD_COLOR)
    cv.imshow('img', img)
    # 高斯卷积(高斯滤波), 可以设置ksize,必须为奇数,不为0时,后面的步骤不起作用;也可以设置成(0,0),然后通过sigmaX和sigmaY计算标准偏差
    result = cv.GaussianBlur(img, (0, 0), 15)
    cv.imshow('result', result)

    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/2.png'
    image_conv(path)

结果展示:

OpenCV-Python图像模糊处理_opencv_03

高斯双边滤波

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

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

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

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

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

# 边缘保留滤波器——高斯双边模糊
def image_bifilter(image_path: str):
    """
    高斯双边模糊
    :param image_path: 图片文件
    :return: 无返回值
    """
    img = cv.imread(image_path, cv.IMREAD_COLOR)
    cv.imshow('input', img)
    # 第三个参数是设置色彩、第四个参数是设置图像坐标
    result = cv.bilateralFilter(img, 0, 50, 10)
    cv.imshow('result', result)

    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/2.png'
    image_bifilter(path)

结果展示:

OpenCV-Python图像模糊处理_卷积_04

 到此这篇关于Python OpenCV图像模糊处理介绍的文章就介绍到这了,更多相关Python OpenCV图像模糊处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分享5个数据处理更加灵活的pandas调用函数方法

    分享5个数据处理更加灵活的pandas调用函数方法

    这篇文章主要介绍了分享5个数据处理更加灵活的pandas调用函数方法,文章基于python的相关内容展开详细介绍,需要的小伙伴可以参考一下
    2022-04-04
  • python算法练习之兔子产子(斐波那切数列)

    python算法练习之兔子产子(斐波那切数列)

    这篇文章主要给大家介绍python算法练习兔子产子,文章先进行问题描述及分析然后设计算法最后再得出完整程序,需要的朋友可以参考一下 文章得具体内容
    2021-10-10
  • Python3+Flask安装使用教程详解

    Python3+Flask安装使用教程详解

    这篇文章主要介绍了Python3+Flask安装使用教程详解,需要的朋友可以参考下
    2021-02-02
  • Python利用3D引擎做一个太阳系行星模拟器

    Python利用3D引擎做一个太阳系行星模拟器

    Python有一个不错的3D引擎——Ursina。本文就来利用Ursina这一3D引擎做一个太阳系行星模拟器,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • python实现PID温控算法的示例代码

    python实现PID温控算法的示例代码

    PID算法是一种常用的控制算法,用于调节和稳定控制系统的输出,这篇文章主要为大家详细介绍了如何使用Python实现pid温控算法,需要的可以参考下
    2024-01-01
  • Python用matplotlib库画图中文和负号显示为方框的问题解决

    Python用matplotlib库画图中文和负号显示为方框的问题解决

    matplotlib中画图的时候会遇到负号显示为方框的问题,下面这篇文章主要给大家介绍了关于Python用matplotlib库画图中文和负号显示为方框的问题解决,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • python asyncio 协程库的使用

    python asyncio 协程库的使用

    这篇文章主要介绍了python asyncio 协程库的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • 详解Python如何使用Falcon构建 API

    详解Python如何使用Falcon构建 API

    Falcon 是一个Python 的 Web 框架,专注于为构建 API 提供一个极其轻量级、超全面的性能平台,下面小编就来为大家详细介绍一下Python如何使用Falcon构建 API吧
    2023-11-11
  • Python处理菜单消息操作示例【基于win32ui模块】

    Python处理菜单消息操作示例【基于win32ui模块】

    这篇文章主要介绍了Python处理菜单消息操作,结合实例形式分析了Python基于win32ui模块实现菜单的创建及菜单项响应相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • python3 queue多线程通信

    python3 queue多线程通信

    这篇文章主要介绍了python3 queue多线程通信,​​Queue​​ 对象已经包含了必要的锁,所以你可以通过它在多个线程间多安全地共享数据,更多相关内容需要的朋友可以参考一下下文文章内容
    2022-07-07

最新评论