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 相关文章推荐
Python3.6正式版新特性预览
Dec 15 Python
python 调用HBase的简单实例
Dec 18 Python
python中Switch/Case实现的示例代码
Nov 09 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python找出完数的方法
Nov 12 Python
关于python多重赋值的小问题
Apr 17 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
详解Python的三种拷贝方式
Feb 11 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
Python print不能立即打印的解决方式
Feb 19 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/05/07 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
详解python 发送邮件实例代码
2016/12/22 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
总账会计岗位职责
2014/03/13 职场文书
外联部演讲稿
2014/05/24 职场文书
庐山导游词
2015/02/03 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
编写python程序的90条建议
2021/04/14 Python
MySQL优化之慢日志查询
2022/06/10 MySQL