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 27 Python
Python中实现switch功能实例解析
Jan 11 Python
TensorFlow实现创建分类器
Feb 06 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python转换时间的图文方法
Jul 01 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Python socket服务常用操作代码实例
Jun 22 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 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里得到前天和昨天的日期的代码
2007/08/16 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python面向对象之Web静态服务器
2019/09/03 Python
python tornado使用流生成图片的例子
2019/11/18 Python
python实现名片管理器的示例代码
2019/12/17 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
日期和时间问题
2015/01/04 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
工程管理造价应届生求职信
2013/11/13 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
2014年检验员工作总结
2014/11/19 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
英文自荐信范文
2015/03/25 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书