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之reload流程实例代码解析
Jan 29 Python
Python实现简单http服务器
Apr 12 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
对Python 数组的切片操作详解
Jul 02 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
python中实现字符串翻转的方法
Jul 11 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
基于python实现银行管理系统
Apr 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
CodeIgniter模板引擎使用实例
2014/07/15 PHP
php中JSON的使用与转换
2015/01/14 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
理解python正则表达式
2016/01/15 Python
python处理xml文件的方法小结
2017/05/02 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
用canvas显示验证码的实现
2020/04/10 HTML / CSS
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
后勤自我鉴定
2013/10/13 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
通知怎么写?
2019/04/17 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python