import cv2 import numpy as np from matplotlib import pyplot as plt # 读取原始图像 image = cv2.imread('D:\\QMJC\\2023.7.12\\TIAOWEN\\AVERAGE\\30A.png', 0) # 进行二维离散傅里叶变换(DFT) dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) # 创建高通滤波器 rows, cols = image.shape crow, ccol = rows // 2, cols // 2 # 中心点 mask = np.ones((rows, cols, 2), np.uint8) mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 0 # 选择中心区域,半径为30 # 应用滤波器 fshift = dft_shift * mask # 进行逆移位操作 f_ishift = np.fft.ifftshift(fshift) # 进行逆傅里叶变换(IDFT) filtered_image = cv2.idft(f_ishift) filtered_image = cv2.magnitude(filtered_image[:, :, 0], filtered_image[:, :, 1]) cv2.imwrite('D:\\QMJC\\2023.7.12\\TIAOWEN\\IMAGE\\000.png',filtered_image) # 显示原始图像和滤波后的图像 plt.subplot(121), plt.imshow(image, cmap='gray') plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image'), plt.xticks([]), plt.yticks([]) plt.show()
时间: 2024-04-13 08:25:07 浏览: 102
代码看起来基本正确,您使用了OpenCV库进行了傅里叶变换和滤波操作,然后使用Matplotlib库进行图像显示。您选择了半径为30的中心区域作为高通滤波器的掩码,并应用于傅里叶变换后的频域图像。最后,通过逆傅里叶变换将滤波后的频域图像转换回空域。
请确保图像路径正确,并且您已经安装了必要的库。如果代码运行出现问题,请检查路径、库的版本等方面是否有误。
如果您有其他问题或疑问,请随时提问。
阅读全文