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之让人欢喜让人忧的迭代
Oct 02 Python
Python 迭代器工具包【推荐】
May 06 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
python中字符串类型json操作的注意事项
May 02 Python
用python实现的线程池实例代码
Jan 06 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
django 邮件发送模块smtp使用详解
Jul 22 Python
解决Python3下map函数的显示问题
Dec 04 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Python 使用生成器代替线程的方法
Aug 04 Python
python opencv通过按键采集图片源码
May 20 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
php自动跳转中英文页面
2008/07/29 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php 魔术方法详解
2014/11/11 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
利用javascript查看html源文件
2006/11/08 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
Python实现发送QQ邮件的封装
2017/07/14 Python
浅析python内置模块collections
2019/11/15 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
高级电工工作职责
2013/11/21 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
党员教师一句话承诺
2014/05/30 职场文书
小学生春游活动方案
2014/08/20 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android