• OpenCV--滤波器(一)


    代码和笔记

    import cv2
    import numpy as np
    
    """
    滤波器--用于图像处理的重要工具,它们可以根据图像中像素的邻域信息来修改像素值,以实现去噪、模糊、锐化、边缘检测等效果。
    
    低通滤波器(Low-pass Filter):
    定义:允许低频信号通过,但减弱(或阻止)高频信号的滤波器。
    原理:在频率域中,低通滤波器会移除高于某个截止频率(cut-off frequency)的所有频率分量。
    
    高通滤波器(High-pass Filter):
    定义:允许高频信号通过,但减弱(或阻止)低频信号的滤波器。
    原理:在频率域中,高通滤波器会移除低于某个截止频率的所有频率分量。
    """
    
    """
    低通滤波器 平滑图像,去除图像中的高频噪声和细节
    """
    
    """
    卷积操作
    """
    img = cv2.imread('/img/cat.jpeg')
    # 卷积核 必须是奇数,而且是float型  / 25相当于取了一个平均
    # 根据卷积核的不同,可以进行锐化、轮廓等操作
    kernel = np.ones((5, 5), np.float32) / 25
    
    # 卷积操作 -1位深 表示和原图一样
    dst = cv2.filter2D(img, -1, kernel)
    
    cv2.imshow('img', img)
    
    """
    方盒滤波和均值滤波
    作用:通过求取像素周围领域像素的平均值来平滑(使图像亮度平缓渐变,减小突变梯度,从而改善图像质量)图像
    特点:算法简单,计算速度较快。然而,在去除噪声的同时,也会去除很多细节部分,导致图像变得模糊。
    """
    # 方盒滤波
    # 只需要设置卷积核大小 normalize=True(卷积核的系数a = 1/(W*H))等价于均值滤波, false时为a = 1
    dst1 = cv2.boxFilter(img, -1, (5, 5), normalize=True)
    
    # 均值滤波
    # 没有位深
    dst2 = cv2.blur(img, (5, 5))
    
    """
    高斯波滤器
    作用:通过高斯函数对像素邻域内的像素值进行加权平均,得到新的像素值。越在中间,比重占的越大。
    特点:比均值滤波更平滑,边界保留更加好。能够有效地去除噪声,并保留图像中的细节部分。
    """
    # (5, 5)卷积核的大小 X轴的标准差sigmaX, 越大平滑(模糊)越明显
    dst3 = cv2.GaussianBlur(img, (5, 5), sigmaX=10)
    
    """
    中值滤波
    作用:对像素邻域内的像素值进行排序,取中值作为该像素的新值。
    特点:在边界保存方面好于均值滤波,特别适用于去除椒盐噪声。但在模板变大时,可能会存在一些边界的模糊。
    """
    # 5卷积核的大小,这里要求是整数
    dst4 = cv2.medianBlur(img, 5)
    
    """
    双边滤波器--美颜
    作用:考虑像素的空间邻近度和像素值相似度的一种折中处理,同时达到保边去噪的目的。
    特点:是一种非线性滤波,保留较多的高频信息,对低频滤波效果较好,但不能去除脉冲噪声。
    """
    # 7 卷积核的大小
    # sigmaColor 如果是黑白图片则为灰度距离,若是彩色图片则为颜色,sigmaSpace 空间距离,这两个值要根据实际情况调整
    dst5 = cv2.bilateralFilter(img, 7, sigmaColor=20, sigmaSpace=50)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
  • 相关阅读:
    【LeetCode】309. 最佳买卖股票时机含冷冻期 动态规划 状态转移分析
    Groovy XML JSON
    抽丝剥茧C语言(高阶)指针进阶练习
    绕过Windows 11安装限制,Rufus带给你“奇迹”,低配电脑的春天
    LibGdx学习记录
    物联网开发笔记(52)- 使用Micropython开发ESP32开发板之多线程
    Flutter笔记:关于Flutter中的大文件上传(上)
    图论08-图的建模-状态的表达与理解 - 倒水问题为例
    随机过程基础知识(二)
    什么叫运行时的Java程序?
  • 原文地址:https://blog.csdn.net/GamBleout/article/details/139776827