前面学习使用OpenCV里的函数实现傅里叶变换,其实Numpy里也有相应的变换,它的变换与Matlab更加接近,如果你想从matlab代码转换过来,使用它可能更加容易一些。
好吧,理论就不多说了,直接来看例子:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import numpy as np
import cv2
from matplotlib import pyplot as plt
#读取图片
img = cv2.imread('rose1.png',cv2.IMREAD_GRAYSCALE)
f = np.fft.fft2(img)#傅里叶变换
fshift = np.fft.fftshift(f)#频点移到中心
magnitude_spectrum = 20*np.log(np.abs(fshift))
#逆变换
rows, cols = img.shape
crow,ccol = rows//2 , cols//2
fshift[crow-30:crow+31, ccol-30:ccol+31] = 0 #高通滤波
f_ishift = np.fft.ifftshift(fshift)#频点从中心移回到原点
img_b