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中的__init__和__new__
Mar 12 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
python+pyqt5编写md5生成器
Mar 18 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
Python递归调用实现数字累加的代码
Feb 25 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
Python pip安装模块提示错误解决方案
May 22 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 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
文件上传程序的全部源码
2006/10/09 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
VUE实现密码验证与提示功能
2019/10/18 Javascript
js判断密码强度的方法
2020/03/18 Javascript
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
详解Python Socket网络编程
2016/01/05 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python标识符命名规范原理解析
2020/01/10 Python
python logging通过json文件配置的步骤
2020/04/27 Python
python基于win32api实现键盘输入
2020/12/09 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
教师演讲稿范文
2014/01/08 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
环保标语大全
2014/06/12 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书