OpenCV-Python使用cv2实现傅里叶变换


Posted in Python onJune 09, 2021

前言

在前一篇的博文中,我们详细讲解了傅里叶变换的原理以及使用Numpy库实现傅里叶变换。但是其实OpenCV有直接实现傅里叶变换的函数。

在OpenCV中,我们通过cv2.dft()来实现傅里叶变换,使用cv2.idft()来实现逆傅里叶变换。两个函数的定义如下:

cv2.dft(原始图像,转换标识)

这里的原始图像必须是np.float32格式。所以,我们首先需要使用cv2.float32()函数将图像转换。而转换标识的值通常为cv2.DFT_COMPLEX_OUTPUT,用来输出一个复数阵列。

经过cv2.dft()函数的变换后,我们会得到原始图像的频谱信息。此时零分量与Numpy库实现一样都不在中心位置。这里我们还是需要使用numpy.fft.fftshift()函数将其移动到中间位置。

需要特别注意的是,函数cv2.dft()返回值是双通道的,第1个通道是结果的实数部分,第2个通道是结果的虚数部分。使用numpy.fft.fftshift()函数处理后,频谱图像还只是一个由实部和虚部构成的值,要显示出来,要使用到另一个函数cv2.magnitude()。

该函数的定义如下:

cv2.magnitude(参数1,参数2)

参数1:浮点型x坐标值,也就是实部

参数2:浮点型y坐标值,也就是虚部,它必须和参数1具有相同的大小(size)

得到频谱图像的幅度之后,还需要将幅度映射到灰度空间[0,255]内,使其以灰度图像显示出来。与前篇博文一样,使用20*np.log(cv2.magnitude())。

实现傅里叶变换

下面,我们来通过上述OpenCV函数来实现傅里叶变换,并显示其频谱信息。

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

img = cv2.imread("4.jpg", 0)

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1]))


plt.subplot(121)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(result, cmap="gray")
plt.axis('off')
plt.show()

运行之后,显示效果与前篇博文一样。

OpenCV-Python使用cv2实现傅里叶变换

实现逆傅里叶变换

还是与上篇博文一样,这里我们过滤图像的频谱信息,这里我们过滤低频信息。

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

img = cv2.imread("4.jpg", 0)

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dftShift = np.fft.fftshift(dft)
result = 20 * np.log(cv2.magnitude(dftShift[:, :, 0], dftShift[:, :, 1]))

rows,cols=img.shape
rows_half,cols_half=int(rows/2),int(cols/2)
mask=np.zeros((rows,cols,2),dtype=np.uint8)
mask[rows_half-30:rows_half+30,cols_half-30:cols_half+30]=1


#逆傅里叶变换
fShift=dftShift*mask
ishift=np.fft.ifftshift(fShift)
iimg=cv2.idft(ishift)
iimg=cv2.magnitude(iimg[:,:,0],iimg[:,:,1])


plt.subplot(121)
plt.imshow(img, cmap="gray")
plt.axis('off')
plt.subplot(122)
plt.imshow(iimg, cmap="gray")
plt.axis('off')
plt.show()

运行之后,效果如下:

OpenCV-Python使用cv2实现傅里叶变换

可以看到过滤低频信息后,图像的边缘信息被消弱了。

到此这篇关于OpenCV-Python使用cv2实现傅里叶变换的文章就介绍到这了,更多相关OpenCV 傅里叶变换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python之模拟鼠标键盘动作具体实现
Dec 30 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
Python实现八大排序算法
Aug 13 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
python中requests小技巧
May 10 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Python合并多张图片成PDF
Jun 09 #Python
Python3 多线程(连接池)操作MySQL插入数据
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Django rest framework如何自定义用户表
Jun 09 #Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 #Python
python缺失值的解决方法总结
Jun 09 #Python
Python提取PDF指定内容并生成新文件
You might like
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
document.write的几点使用心得
2014/05/14 Javascript
nodejs教程之入门
2014/11/21 NodeJs
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
jquery实现拖动效果
2016/08/10 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
如何在Python中编写并发程序
2016/02/27 Python
python操作oracle的完整教程分享
2018/01/30 Python
python 实现A*算法的示例代码
2018/08/13 Python
使用python进行拆分大文件的方法
2018/12/10 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
师范生自我鉴定范文
2013/10/05 职场文书
企业诚信承诺书
2014/05/23 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
讲党性心得体会
2014/09/03 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
详解如何用Python实现感知器算法
2021/06/18 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL