第7章:图像的平滑处理

第7章:图像的平滑处理

    • 一、均值滤波:
    • 二、方框滤波:
    • 三、高斯滤波:
    • 四、中值滤波
    • 五、双边滤波:
    • 六、2D卷积

​ 图像的平滑处理是在尽量图像原有信息的情况下,过滤掉图像内部的噪声。由于图像平滑处理的同时通常伴随着图像的模糊操作,有时图像平滑处理也称为图像模糊处理。在计算机中有时也被成为图像滤波。这只是一个名称,不同的地方可能有不同的说法,不要太过于纠结。

  • 图像平滑处理的目的是:过滤掉图像内部噪声

​ 图像平滑处理的实质:是将图像中与周围像素点的像素值差异较大的进行处理,将其值调整为周围像素点像素值的近似值。

如图所示:

image-20211014150205518

位于第3行第3列的像素点,与周围像素点值的大小存在明显差异。反映在图像上,该点周围的像素点都是灰度点,而该点的颜色较深,是一个黑色点可能是噪声,需要将该点的值调整为周围像素值的近似值。

image-20211014150330480

图像平滑处理的方式有很多,下面主要介绍:

  • 均值滤波
  • 方框滤波
  • 高斯滤波
  • 中值滤波
  • 双边滤波
  • 2D卷积(自定义滤波)

一、均值滤波:

​ 均值滤波是指以当前像素点为中心,使用当前像素点周围N * N个像素值的均值来代替当前像素值。使用该方法遍历处理图像内每一个像素点,既可以完成整幅图像的均值滤波。

​ 针对图像边缘像素点,可以只取图像内存在的周围邻域点的像素值的均值。也可以将图像边缘扩展后,可以在新增的行和列内填充不同的像素值,在此基础上,再针对原始图像进行N · N邻域像素点的均值计算。OpenCV提供了多种边界处理方式,我们可以根据实际需要选用不同的边界处理模式。

image-20211014152606976

1、函数语法:

  • 在OpenCV中,实现均值的函数是cv2.blur(),其语法格式:

    • dst = cv2.blur(src, ksize, anchor, borderType)

      • dst:返回值,均值滤波处理后得到的处理结果。

      • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

      • ksize:是滤波核的大小。滤波核大小指在均值处理过程中,其邻域图像的高度和宽度。例如,其值可以是(5, 5),表示以5×5大小的邻域均值作为图像均值滤波处理的结果。

        image-20211014152435585

        M和N分别对应高度和宽度。一般情况下,M和N是相等的,例如比较常用的3×3、5×5、7×7等。如果M和N的值越大,参与运算的像素点数量就越多,图像失真越严重。

      • anchor:锚点,其默认值是(-1,-1), 表示当前计算均值的点位于核的中心点位置,该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

      • borderType:边界样式,该值决定了以何种方式来处理边界,一般情况下不需要考虑该值的取值,采用默认情况即可。

示例:

import cv2img = cv2.imread('../lena512color_noise.tiff')
dst1 = cv2.blur(img, (7, 7))
dst2 = cv2.blur(img, (15, 15))
cv2.imshow('img', img)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

二、方框滤波:

​ 方框滤波与均值滤波不同,方框滤波不会计算像素均值。在均值滤波中,滤波结果是任意一点的邻域平均值。方框滤波可以自由选择对均值滤波的结果是否进行归一化,既可以自由选择滤波结构是邻域之和,还是邻域之和的平均值。

1. 方框滤波语法:

在OpenCV中,实现方框滤波的函数是cv2.boxFilter(),其语法格式是:

dst = cv2.boxFilter(src, ddepth, ksize, anchor, normalize, borderType)

  • dst:返回值,均值滤波处理后得到的处理结果。

  • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

  • ddepth:结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。

  • ksize:是滤波核的大小。滤波核大小指在均值处理过程中,其邻域图像的高度和宽度。例如,其值可以是(5, 5),表示以5×5大小的邻域均值作为图像均值滤波处理的结果。

在这里插入图片描述

  • anchor:锚点,其默认值是(-1,-1), 表示当前计算均值的点位于核的中心点位置,改制使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

  • normalize:表示在滤波时是否进行归一化处理(归一化:这里指的是将计算结果规范到合理的范围内,即将计算结果规范到当前像素值范围内的值)处理。该参数是一个逻辑值。

    • 当参数normalize=1时,表示进行归一化处理,要用邻域像素值得和处理面积。
    • 当参数normalize=0时,表示不需要进行归一化处理,直接使用邻域像素值的和。(当和超出255时为255)

    通常情况下,针对方框滤波,卷积核可以表示为:
    在这里插入图片描述

上述对应关系为:
f(n)={1/width⋅height,normalize=11,normalize=0f(n)= \begin{cases} 1/width·height, & \text{normalize=1}\\ 1,& \text{normalize=0} \end{cases} f(n)={1/widthheight,1,normalize=1normalize=0

  • borderType:边界样式,该值决定了以何种方式来处理边界。

通常情况下,在使用方框滤波函数时,对于参数anchor、normalize、borderType,直接采用默认值即可。

示例:

import cv2img = cv2.imread('../lena512color_noise.tiff')
rst = cv2.boxFilter(img, -1, (7, 7))
cv2.imshow('img', img)
cv2.imshow('rst', rst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

三、高斯滤波:

​ 在均值滤波和方框滤波中,其邻域内每个像素的权重是相等的。在高斯滤波中,会将离中心点近的权重加大,离中心点远的权重减小,在此基础上计算邻域内各个像素值不同权重的和。

1. 基本原理

  • 在高斯滤波中,卷积核的值不在都是1。如图

    image-20211016234515733

  • 在高斯滤波中,卷积核的宽度和高度可以不相同,但是他们必须都是奇数。

    image-20211016234617059

  • 每一种尺寸的卷积核都可以有多种不同形式的权重比例。如图同样是5x5的卷积核。

    image-20211016234752725

    在不同的资料中,卷积核有多种不同的表示方式。它们可能写在一个表格内,也可能示写在一个矩阵内。在实际计算中,卷积核是归一化处理的,这种处理可以表示为小数形式的卷积核,也可以表示为分数形式。没有经过归一化处理的卷积核,是为了说明问题用的。严格来讲,使用没有进行归一化处理的卷积核进行滤波,得到的结果往往是错误的。

2. 函数语法

在OpenCV中,实现高斯滤波的函数cv2.GaussianBlur(),该函数的语法格式是:

dst = cv2.GauusianBlur(src, ksize, sigmaX, sigmaY, borderType)

  • dst:返回值,均值滤波处理后得到的处理结果。

  • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

  • ksize:是滤波核的大小。滤波核大小指在均值处理过程中,其邻域图像的高度和宽度。但需要注意,滤波核的值必须是奇数。

  • sigmaX:卷积核在水平方向上(X轴方向)的标准差,其控制的是权重比例。

  • sigmaY:卷积核在垂直方向上(Y轴方向)的标准差,如果将该值设置为0,则只采用sigmaX的值;如果sigmaX、sigmaY都是0,则通过ksize.width和ksize.height计算得到:

    • sigmaX = 0.3 × [(ksize.width-1) × 0.5-1] + 0.8
    • sigmaY = 0.3 × [(ksize.height-1) × 0.5-1] + 0.8
  • borderType:边界样式,该值决定了以何种方式来处理边界。一般情况下,不需要考虑该值,直接采用默认值。

注意:在该函数中sigmaY、borderType是可选参数。sigmaX是必选参数,但是可以将其设置为0,让函数自己去计算sigmaX的具体值。

​ 官方文档建议显示的指定ksize、sigmaX、sigmaY三个参数的值,以避免将来参数修改后可能造成的语法错误。当然,实际处理中,可以显示的指定sigmaX、sigmaY为默认值0。因此,函数cv2.GaussianBlur()的常用形式为:

  • dst = cv2.GaussianBlur(src, ksize, 0, 0)

import cv2
o=cv2.imread("image\\lenaNoise.png")
r=cv2.GaussianBlur(o,5,5,0,0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

四、中值滤波

​ 中值滤波不同于前面的滤波方式,不再采用滤值的方式计算滤波的结果。它采用的是邻域内所有像素值的中间值来替代当前像素点的像素值。

1. 基本原理:

​ 中值滤波会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将其进行排序,然后将位于中间位置的像素值作为当前像素点的像素值。

2. 函数语法:

在OpenCV中,实现中值滤波的函数是cv2.medianBlur(),其语法格式是:

dst = cv2.medianBlur(src, ksize)

  • dst:返回值,均值滤波处理后得到的处理结果。

  • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

  • ksize:是滤波核的大小。滤波核大小指在均值处理过程中,其邻域图像的高度和宽度。但需要注意,滤波核的值必须是比1大的奇数, 比如3、5、7等。

示例:

import cv2img = cv2.imread('../lena512color_noise.tiff')
rst = cv2.medianBlur(img, 5)
cv2.imshow('img', img)
cv2.imshow('rst', rst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

​ 从结果可以看出,由于没有进行均值处理,中值滤波不存在均值滤波等滤波方式带来的细节模糊问题。在中值滤波处理中,噪声成分很难被选上,所以可以在几乎不影响原有图像的情况下取出全部噪声。但缺点是由于需要进行排序等操作,中值滤波需要的运算量较大。

五、双边滤波:

​ 双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息。

1. 基本原理:

前面的滤波方式都只考虑了空间的权重信息,这种情况计算起来比较方便,但在处理边缘信息时会存在较大问题。例如,图像左侧是黑色,右侧是白色,中间是很明显的边缘。

image-20211017103641068

​ 在均值滤波、方框滤波、高斯滤波中,都会计算边缘上各个像素点的加权平均值,从而模糊边缘信息。如下图是高斯滤波处理过的图像:

image-20211017104218213

​ 双边滤波在计算某一像素点的新值时,不仅考虑距离信息(距离越远,权重越小)还考虑色彩信息(色彩差别越大,权重越小)。双边滤波综合考虑距离和色彩的权重结构,既能有效的去除噪声,又能够较好的保护边缘信息。

​ 在双边滤波中,当处在边缘时,与当前点色彩相近的像素点(颜色距离很近)会被给予较大的权重值;而与当前色彩差别较大的像素点(颜色距离很远)会被给予较小的权重值(极端情况下权重可能为0,直接忽略该点),这样就保护了边缘信息。

2. 函数语法:

在OpenCV中,实现双边滤波的函数是cv2.bilateralFilter(),该函数的语法是:

dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)

  • dst:返回值,均值滤波处理后得到的处理结果。
  • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。
  • d:在滤波时选取的空间距离参数,这里表示以当前为中心点的直径。如果该值为非正数,则会自动从参数sigmaSpace计算得到如果滤波空间较大(d>5),则速度较慢。因此,在实际应用中推荐d=5。对于较大噪声的离线滤波可以选择d=9。
  • sigmaColor:滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于sigmaColor的像素点,能够参与到当前的滤波中。该值越大,说明周围有越多的像素点可以参与到运算。该值为0时,滤波失去意义;该值为255时,指定直径内所有点都能够参与运算。
  • sigmaSpagce:是坐标空间内的sigma值。它的值越大,说明有越多的点能够参与到滤波计算中来。当d>0时,无论sigmaSpagce的值如何,d都指定邻域大小;否则,d与sigmaSpace的值成比例。
  • borderType:边界样式,该值决定了以何种方式来处理边界。一般情况下,不需要考虑该值,直接采用默认值。

​ 简单起见的话可以将sigmaColor、sigmaSpagce的值设为相同的。如果他们的值比较小(小于10)滤波效果不明显;如果他们的值比较大(例如:大于150),则滤波效果会比较明显,会产生卡通效果。

在cv2.bilateralFilter()函数中,除了borderType为可选参数外,其他均为必选参数。

import cv2img = cv2.imread('../lena512color_noise.tiff')
rst = cv2.bilateralFilter(img, 25, 100, 100)
cv2.imshow('img', img)
cv2.imshow('rst', rst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

由上面结果可以看出,双边滤波对去除噪声的效果并不好。双边滤波的优势体现在对边缘信息的处理上。

import cv2
import numpy as npimg = np.zeros((500, 500), dtype=np.uint8)
img[:, :250] = 255
rst = cv2.bilateralFilter(img, 25, 100, 100)
cv2.imshow('img', img)
cv2.imshow('rst', rst)
cv2.waitKey()
cv2.destroyAllWindows()

image-20211017104837702

六、2D卷积

​ OpenCV提供了多种滤波方式,来是实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等。大多数滤波方式所使用的卷积核都具有一定的灵活性,能够方便地设置卷积核的大小和数量。但是,我们有时候希望使用特定的卷积核来实现卷积操作,例如使用如下卷积核来进行卷积操作。

image-20211017105649221

前面介绍过的滤波函数都无法将卷积核确定为上述形式,这时要使用OpenCV的自定义卷积函数。

​ 在OpenCV中,允许用户自定义卷积核实现卷积操作,使用自定义卷积核实现卷积操作的函数是cv2.filer2D(),其语法格式为:

dst = cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)

  • dst:返回值,均值滤波处理后得到的处理结果。

  • src:需要处理的图像,即原始图像。可以有任意数量的通道,并能对各个通道独立处理。图像的深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。

  • ddepth:结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。

  • kenel:卷积核,是一个单通道的数组。如果想在处理彩色图像时,让每个通道使用不同的核,则必须将彩色图像分解后使用不同的核进行操作。

  • anchor:锚点,其默认值是(-1,-1), 表示当前计算均值的点位于核的中心点位置,改制使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

  • delta:修正值。可选项,如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果。

  • borderType:边界样式,该值决定了以何种方式来处理边界。一般情况下,不需要考虑该值,直接采用默认值。

通常情况下,使用滤波函数cv2.filter2D()时,对于参数anchor、delta、borderType直接采用默认值即可。

示例: 自定义一个卷积核,通过函数cv2.filter2D()应用该卷积核对图像进行滤波操作,并显示滤波结果。

image-20211017110708632

import cv2
import numpy as npimg = cv2.imread('../lena512color_noise.tiff')
kernal = np.ones((9, 9), dtype=np.float32) / 81
rst = cv2.filter2D(img, -1, kernal)
cv2.imshow('img', img)
cv2.imshow('rst', rst)
cv2.waitKey()
cv2.destroyAllWindows()

[外链图片转存中...(img-m8umG3dN-1642887693106)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【树莓派学习笔记】三、点亮一个LED灯(C语言 - WiringPi、Python - RPi.GPIO/GPIO Zero、bash脚本)

目录C语言WiringPiPythonRPi.GPIOGPIO Zerobash脚本平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 若GPIO输出为3.3V 采用压降为1.7V的红色LED灯 设工作电流为15mA,则限流电阻取≥(3.3 - 1.7)/0.015 106.67欧较为安全。 C语言 Wi…

OpenStack 之Nova添加扩展API流程,附带资源的查找功能

例子中涉及到SQLAlchemy 得相关操作,可以参考 上一随笔 Openstack 中规定,扩展openstack得api有两种方式 创建新的WSGI 资源扩展原有得WSGI资源得控制器(我得理解是,接受到API请求后,具体得响应逻辑)这两种…

第8章:形态学操作

第8章:形态学操作one. 腐蚀操作:two. 膨胀:three. 通用形态学函数:four. 开运算:five. 闭运算:six. 形态学梯度运算:seven. 礼帽运算:eight. 黑帽运算:night. 核函数&…

【树莓派学习笔记】四、OpenCV的安装与卸载

目录安装修改host以连接上Github测试IP修改树莓派的hosts安装各种依赖包安装OpenCV只安装核心模块安装核心模块和opencv_contribC Opencv 测试编写测试源码编译测试卸载平台:树莓派3B 版本: 2021-05-07-raspios-buster-armhf 安装 修改host以连接上Git…

第9章:图像梯度

第9章:图像梯度one. Sobel理论基础1. 计算水平方向偏导数的近似值2. 计算垂直方向偏导数的近似值two. Sobel算子及函数的使用:1. 函数语法:2. 对像素取绝对值:3. 方向:three. Scharr 算子及函数使用:1. 函数语法:2. 实…

【树莓派学习笔记】五、处理、自动重命名并另存为图片

目录编写源码编译测试平台&#xff1a;树莓派3B 版本&#xff1a; 2021-05-07-raspios-buster-armhf 编写源码 所用源码修改自【机器视觉学习笔记】最近邻插值实现图片任意角度旋转&#xff08;C&#xff09; 在合适的地方编写源码 nano main.cpp#include <opencv2/openc…

第10章:Canny图像边缘检测

第10章&#xff1a;Canny图像边缘检测一、Canny边缘检测的基础&#xff1a;1. 应用高斯滤波去除图像噪声&#xff1a;2. 计算梯度3.非极大值抑制4. 应用双阈值确定边缘&#xff1a;二、Canny函数使用&#xff1a;​ Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。19…

【树莓派学习笔记】六、启用摄像头、实时视频、录像和截图

目录安装摄像头配置使用luvcview平台&#xff1a;树莓派3B 版本&#xff1a; 2021-05-07-raspios-buster-armhf 安装摄像头 配置 sudo raspi-config重启后 cd /dev ls可看到新增了video0设备 使用luvcview 安装 sudo apt-get install luvcview查看摄像设备详细信息 luv…

Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解

2019独角兽企业重金招聘Python工程师标准>>> VGA&#xff1a;Video Graphics Array&#xff0c;即&#xff1a;显示绘图矩阵&#xff0c;相当于640480 像素&#xff1b;HVGA&#xff1a;Half-size VGA&#xff0c;即&#xff1a;VGA的一半&#xff0c;分辨率为48032…

敏捷合同-摘自网络

敏捷软件开发实践的文化中存在着一个断层&#xff0c;该断层同样体现在许多敏捷团队中。这个断层就是业务分析人员在敏捷项目中的角色——谁来担任这个角色&#xff1f;它的作用 和价值是什么&#xff1f;它又是如何发生改变的&#xff1f;这种情况的潜台词&#xff08;其实我曾…

第11章:图像金字塔

第11章&#xff1a;图像金字塔一、理论基础&#xff1a;1. 向下采样&#xff1a;2. 向上采样&#xff1a;二、pyrDown函数使用&#xff1a;三、pyrUp函数及使用&#xff1a;四、采样可逆性研究五、拉普拉斯金字塔1. 定义&#xff1a;2. 应用&#xff1a;什么是图像金子塔&#…

【树莓派学习笔记】七、(免费)内网穿透将树莓派作为服务器管理网站

目录nginx安装开机自启动测试查看nginx安装路径查看配置文件路径(测试用)修改index.nginx-debian.html内网穿透免费方案ngrok原版方案下载ngrok连接账户开启内网穿透httpSSH网云穿方案开通隧道下载开启内网穿透开机自启动花生壳方案下载和安装添加内网穿透映射测试平台&#xf…

第12章:图像轮廓

第12章&#xff1a;图像轮廓一、查找并绘制轮廓&#xff1a;1. 查找图像轮廓&#xff1a;2. 绘制图像轮廓&#xff1a;3. 绘制轮廓实例&#xff1a;二、矩特征1. 矩的计算&#xff1a;moments函数2. 计算轮廓面积&#xff1a;contourArea函数3. 计算轮廓长度&#xff1a;arcLen…

【树莓派学习笔记】八、两步安装VS Code (Visual Studio Code)

目录下载安装使用(可选)安装插件C/CCMake ToolsCode Runner平台&#xff1a;树莓派3B 版本&#xff1a; 2021-05-07-raspios-buster-armhf 下载 官网下载 Download Visual Studio Code 发送到树莓派 安装 sudo dpkg -i Desktop/code_1.60.2-1632316275_armhf.deb 使用 在…

20 best jquery 截图

digguka, January 05, 2012jQuery Image Crop - A very useful list of tools for cropping, zooming and resizing of images. Some of plugins come with the ability to upload croped images. 转载于:https://www.cnblogs.com/yqskj/archive/2013/05/25/3098411.html

【RK3399Pro学习笔记】一、Thinker Edge R 安装系统和VNC服务

目录下载固件安装USB驱动下载烧录工具刷机第一次开机连接WifiSSH登录换源设置语言安装VNC服务平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 风火轮论坛资料网盘 提取码&#xff1a;wqbd 下载固件…

第13章:直方图处理

第13章&#xff1a;直方图处理一、直方图的含义&#xff1a;1. 普通直方图&#xff1a;2. 归一化直方图&#xff1a;二、绘制直方图&#xff1a;1. 使用Numpy绘制直方图&#xff1a;2. 使用OpenCV绘制直方图&#xff1a;3. 使用掩码绘制直方图&#xff1a;三、直方图均衡化&…

操作系统 内存管理篇

一.程序的装入和链接 装入方式&#xff1a; 链接方式&#xff1a; 二.进程的内存映像 三.内存的分配 1.连续分配 分配方式&#xff1a; 2.不连续分配 分页&#xff1a;页面大小一致 引入快表&#xff08;和 cache 处理思路一致&#xff09; 升级到二级页表 分段&#xff1a;…

【RK3399Pro学习笔记】二、Thinker Edge R 内网穿透以实现远程SSH

目录免费方案花生壳下载安装添加内网穿透映射测试平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 因Thinker Edge R安装的镜像为64位的版本 getconf LONG_BIT免费方案 花生壳 下载 在花生壳下载…

第14章:傅里叶变换

第14章&#xff1a;傅里叶变换一、理论基础&#xff1a;二、Numpy实现傅里叶变换&#xff1a;1. 实现傅里叶变换&#xff1a;2. 逆傅里叶变换&#xff1a;3. 高通滤波示例&#xff1a;三、OpenCV实现傅里叶变换&#xff1a;1. 实现傅里叶变换&#xff1a;2. 实现逆傅里叶变换&a…