凌顺
凌顺

目录

OpenCV Python 使用离散傅里叶从空间域到频域的变换

本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0

实现目的

学会 使用离散傅里叶从空间域到频域的变换。

file

实现代码

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

file

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

file

4,将图像从频谱转换回空间,并显示

restored = cv2.idft(fft, flags=cv2.DFT_SCALE | cv2.DFT_REAL_OUTPUT)
plt.imshow(restored, cmap='gray')

file

程序说明

OpenCV使用了一种快速傅里叶变换算法(由cv.idft实现)。用于计算离散傅里叶变换,并对其逆形式(cv.idft)使用相同的方法。
具体请参考:
https://docs.opencv.org/4.1.1/d2/de8/group__core__array.html#gaa708aa2d2e57a508f968eb0f69aa5ff1