学习傅里叶变换之高通滤波和低通滤波推荐博客:https://blog.csdn.net/Eastmount/article/details/89645301
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0)#输出图片拉满
# plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')
# plt.axis('off')
# plt.subplot(122)
plt.imshow(res, 'gray')#使图片可视化并且为‘gray’灰色
# plt.title('Result Image')
plt.axis('off')#不显示轴线
plt.savefig('out.jpg')#输出了图片
# plt.show()#展示图片
代码块中没注释的部分就可以把傅里叶变化后的图片输出出来了。
除了这种方法,我目前不知道其他方法,因为matplotlib的封装导致输出的图片不是全黑就是全白,诶。
附上批量傅里叶变化低通滤波并导出图片的完整代码:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
import os
#读取图像
for i in range(81,629):#将81到628的图片进行转换
if os.path.exists({}.jpg'.format(i)):#这一步是用来判断是否有这个图片,防止数字不连续
img = cv2.imread({}.jpg'.format(i), 0)
#傅里叶变换(使用cv2.dft进行傅里叶变化)
#img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法
#数据类型转换
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
#图像中的低频部分移动到图像的中心
fshift = np.fft.fftshift(dft)
#设置低通滤波器
rows, cols = img.shape#其实这个可以用shape[0]和[1]来化简
crow,ccol = int(rows/2), int(cols/2) #中心位置
#定义掩模
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
#掩膜图像和频谱图像乘积
f = fshift * mask
#傅里叶逆变换#图像的低频和高频部分移动到图像原来的位置
ishift = np.fft.ifftshift(f)
#使用cv2.idft进行傅里叶的反变化
iimg = cv2.idft(ishift)
#使用cv2.magnitude转化为空间域内
res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
#显示原始图像和低通滤波处理图像
plt.subplots_adjust(top=1,bottom=0,left=0,right=1,hspace=0,wspace=0)
plt.imshow(res, 'gray')
plt.axis('off')
plt.savefig('/fft-origin1/{}.jpg'.format(i))