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中的命令行参数解析工具之docopt详解
Mar 27 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python生成器推导式用法简单示例
Oct 08 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Python 日期与时间转换的方法
Aug 01 Python
Scrapy项目实战之爬取某社区用户详情
Sep 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中全局变量global的使用演示代码
2011/05/18 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php 可变函数使用小结
2018/06/12 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
详解Django框架中的视图级缓存
2015/07/23 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python去除文件中重复的行实例
2018/06/29 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
怎样写离婚协议书
2014/09/10 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
中层干部考核评语
2015/01/04 职场文书
长城导游词400字
2015/01/30 职场文书
开业庆典致辞
2015/08/01 职场文书