本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0
实现目的
学会 使用离散傅里叶从空间域到频域的变换。
实现代码
1,加载需要的库并灰度显示图像
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('dog.png',0).astype(np.float32) / 255
plt.imshow(img, cmap='gray')
2,应用离散傅立叶变换
fft = cv2.dft(img, flags=cv2.DFT_COMPLEX_OUTPUT)
3,可视化光谱图像
shifted = np.fft.fftshift(fft, axes=[0, 1])
magnitude = cv2.magnitude(shifted[:, :, 0], shifted[:, :, 1])
magnitude = np.log(magnitude)
plt.axis('off')
plt.imshow(magnitude, cmap='gray')
plt.tight_layout()
plt.show()
4,将图像从频谱转换回空间,并显示
restored = cv2.idft(fft, flags=cv2.DFT_SCALE | cv2.DFT_REAL_OUTPUT)
plt.imshow(restored, cmap='gray')
程序说明
OpenCV使用了一种快速傅里叶变换算法(由cv.idft实现)。用于计算离散傅里叶变换,并对其逆形式(cv.idft)使用相同的方法。
具体请参考:
idft