python opencv图像的高通滤波和低通滤波的示例代码

 更新时间:2022年06月23日 14:23:10   作者:白羊by  
这篇文章主要介绍了python opencv图像的高通滤波和低通滤波,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

上一章我们说明了如何将图像机娘傅里叶变换,将图像由时域变换成频域,并将低频移动至图像中心。那么将低频移动中心后,就可以将图像的低频和高频分开,从而进行低通滤波和高通滤波的处理。

完整代码

低通滤波

import cv2
import numpy as np
import matplotlib.pyplot as plt

# cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRAYSCALE将以灰度图的形式读取
img = cv2.imread('./moon.jpg', flags = cv2.IMREAD_GRAYSCALE)  
# 将图像除以255是为了将图像向数字准换成fioat32数据
img1 = img/255 
# 进行傅里叶变换,时域——>频域
dtf = cv2.dft(img1, flags = cv2.DFT_COMPLEX_OUTPUT)  
# 移动低频波到中心位置
dft_shift = np.fft.fftshift(dtf)  

# 低通滤波
h,w = img.shape
# 图像中心点即低频波所在位置
h2, w2 = h//2, w//2  
mask = np.zeros((h,w,2), dtype=np.uint8)
# 选取长宽为100的区域的低频部分为1,其余部分为0
mask[h2-50:h2+50,w2-50:w2+50] = 1  

# 低频部分保留,其余部分*0被滤掉
dft_shift*=mask  
# 傅里叶逆变换,频域——>时域
ifft_shift2 = np.fft.ifftshift(dft_shift)  
result = cv2.idft(ifft_shift2)

# 创建显示窗口,显示原图
plt.figure(figsize=(12,9))
plt.subplot(121)
plt.imshow(img, cmap = 'gray')

# 创建显示窗口,显示低通滤波后的图像
plt.subplot(122)
plt.imshow(result[:,:,0], cmap='gray')
plt.show()

高通滤波

高通滤波和低通滤波的主要区别在于,低通滤波是保留中心的低频波去除高频波,高通滤波是去除中心的低频波保留高频波。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRAYSCALE将以灰度图的形式读取
img = cv2.imread('./moon.jpg', flags = cv2.IMREAD_GRAYSCALE)  
# 将图像除以255是为了将图像向数字准换成fioat32数据
img1 = img/255 
# 进行傅里叶变换,时域——>频域
dtf = cv2.dft(img1, flags = cv2.DFT_COMPLEX_OUTPUT)  
# 移动低频波到中心位置
dft_shift = np.fft.fftshift(dtf)

# 高通滤波
h,w = img.shape
# 图像中心点即低频波所在位置
h2, w2 = h//2, w//2  # 中心点
# 选取长宽为100的区域的低频部分为0,其余高频部分为1
dft_shift[h2-5:h2+5,w2-5:w2+5] = 0
# 傅里叶逆变换,频域——>时域
ifft_shift2 = np.fft.ifftshift(dft_shift)  
result = cv2.idft(ifft_shift2)

# 创建显示窗口,显示原图
plt.figure(figsize=(12,9))
plt.subplot(121)
plt.imshow(img, cmap = 'gray')

# 创建显示窗口,显示低通滤波后的图像
plt.subplot(122)
plt.imshow(result[:,:,0], cmap='gray')
plt.show()

结果展示

改变滤波区域的大小可以改变滤波的程度,可以修改如图所示的代码中的相关部分:

低通滤波

高通滤波

到此这篇关于python opencv图像的高通滤波和低通滤波的文章就介绍到这了,更多相关python opencv图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现五子棋游戏

    python实现五子棋游戏

    这篇文章主要为大家详细介绍了python实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • python+opencv边缘提取与各函数参数解析

    python+opencv边缘提取与各函数参数解析

    这篇文章主要介绍了python+opencv边缘提取与各函数参数解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 详解如何基于Pyecharts绘制常见的直角坐标系图表

    详解如何基于Pyecharts绘制常见的直角坐标系图表

    pyecharts是基于前端可视化框架echarts的Python可视化库,下面这篇文章主要给大家介绍了关于如何基于Pyecharts绘制常见的直角坐标系图表的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 从Python程序中访问Java类的简单示例

    从Python程序中访问Java类的简单示例

    这篇文章主要介绍了从Python程序中访问Java类的简单示例,包括给出了在安卓开发中的一个短小示例,需要的朋友可以参考下
    2015-04-04
  • python子线程如何有序执行

    python子线程如何有序执行

    最近在写一个项目,需要用到子线程,那么python子线程如何有序执行,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python list转dict示例分享

    python list转dict示例分享

    这篇文章主要介绍了python list转dict的使用方法,大家参考使用吧
    2014-01-01
  • Python截图并保存的具体实例

    Python截图并保存的具体实例

    在本篇文章里小编给大家分享了一篇关于Python截图并保存的具体实例,对此有兴趣的朋友们可以参考下。
    2021-01-01
  • python列表中remove()函数的使用方法详解

    python列表中remove()函数的使用方法详解

    这篇文章主要给大家介绍了关于python列表中remove()函数的使用,以及Python列表的remove方法的注意事项,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Python实现用户名和密码登录

    Python实现用户名和密码登录

    这篇文章主要为大家详细介绍了Python实现用户名和密码登录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python pygorithm模块用法示例【常见算法测试】

    Python pygorithm模块用法示例【常见算法测试】

    这篇文章主要介绍了Python pygorithm模块用法,结合实例形式分析了pygorithm模块的功能、安装及针对常见算法的相关使用操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论