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网络编程中urllib2模块的用法总结
Jul 12 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
python socket网络编程之粘包问题详解
Apr 28 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
python selenium firefox使用详解
Feb 26 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
sklearn的predict_proba使用说明
Jun 28 Python
keras:model.compile损失函数的用法
Jul 01 Python
python中常用的数据结构介绍
Jan 12 Python
python中%格式表达式实例用法
Jun 18 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
学习php过程中的一些注意点的总结
2013/10/25 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
java必学必会之static关键字
2015/12/03 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
口腔医学技术应届生求职信
2013/11/09 职场文书
先进党支部事迹材料
2014/01/13 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
小学学校评估方案
2014/06/08 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
财务整改报告范文
2014/11/05 职场文书
贷款担保书范本
2015/09/22 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js