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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
Python pickle模块用法实例分析
May 27 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
Python图像处理之简单画板实现方法示例
Aug 30 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
Python如何脚本过滤文件中的注释
May 27 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
使用AJAX和Django获取数据的方法实例
Oct 25 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
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Python简单实现enum功能的方法
2016/04/25 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
python3 mmh3安装及使用方法
2019/10/09 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
Python bytes string相互转换过程解析
2020/03/05 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
python 实现两个npy档案合并
2020/07/01 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
个人简历自荐信
2014/06/26 职场文书
二手房购房协议书范本
2014/10/05 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
学生退学证明
2015/06/23 职场文书
行为习惯主题班会
2015/08/14 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang