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()

 效果:

猜你喜欢

转载自blog.csdn.net/chehec2010/article/details/129900568
今日推荐