OpenCV实现傅里叶变换及逆变换

pi介绍: 

返回结果=cv2.dft(原始图像,转换标识)

返回结果:是双通道的,第一个通道是结果的实数部分,第二个通道是结果的虚数部分
原始图像:输入图像要首先转换成np.float32格式,np.float32(img)
转换标识:flags = cv2.DFT_COMPLEX_OUTPUT,输出一个复数阵列

 

代码部分:

import numpy as np
import cv2    #opencv-python
import matplotlib.pyplot as plt

img = cv2.imread("../images/chenqiaoen.jpg",0)
#dft函数傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#移动左上角低频到图像中心
dftShift = np.fft.fftshift(dft)
#傅里叶变换结果是双通道,我们需要把双通道转换为三通道灰度图像,20*转换到0-255的图像
result = 20*np.log(cv2.magnitude(dftShift[:,:,0],dftShift[:,:,1]))

plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title("original")
plt.axis("off")

plt.subplot(122)
plt.imshow(result,cmap = "gray")
plt.title("result")
plt.axis("off")
plt.show()

 

效果。。

Opencv傅里叶逆变换:

代码:

import numpy as np
import cv2    #opencv-python
import matplotlib.pyplot as plt

img = cv2.imread("../images/chenqiaoen.jpg",0)
#dft函数傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#移动左上角低频到图像中心
dftShift = np.fft.fftshift(dft)
#再从中间移动低频左上角
ishift = np.fft.ifftshift(dftShift)
#傅里叶逆变换
iImg=cv2.idft(ishift)
#需要把2通道的转换为三通道的灰度图像,转换成8位的位图
iOmg=cv2.magnitude(iImg[:,:,0],iImg[:,:,1]);


plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title("original")
plt.axis("off")

plt.subplot(122)
plt.imshow(iOmg,cmap = "gray")
plt.title("reverse")
plt.axis("off")
plt.show()

 效果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值