python plt 傅里叶变化后的图片如何导出

本文介绍了一种使用傅里叶变换进行低通滤波的图像处理方法,并提供了详细的Python代码实现,包括批量处理图像并导出结果的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习傅里叶变换之高通滤波和低通滤波推荐博客: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))
     
Python中,可以使用NumPy库中的fft函数进行光谱傅立叶变换。通过使用fft函数,可以将一个一维或二维的数字矩阵转换为其对应的傅立叶变换。使用方法如下所示: 1. 对于一维信号的分数阶傅里叶变换,可以使用frft函数(引用)。该函数的参数包括要转换的数字矩阵以及沿x和y轴的变换顺序。函数将返回傅立叶变换后的结果。 2. 对于二维图像的傅立叶变换,可以使用NumPy库中的fft2函数。该函数会将图像转换为频域,并返回傅立叶变换后的结果。这也被称为二维离散傅立叶变换(DFT)(引用)。 以下是一个使用Python进行光谱傅立叶变换的示例代码: ```python import cv2 as cv import numpy as np from matplotlib import pyplot as plt # 读取图像 img = cv.imread('messi5.jpg', 0) # 进行傅立叶变换 f = np.fft.fft2(img) # 将零频率分量(DC分量)置于中心位置 fshift = np.fft.fftshift(f) # 计算幅度谱 magnitude_spectrum = 20 * np.log(np.abs(fshift)) # 显示结果 plt.subplot(121), plt.imshow(img, cmap='gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray') plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([]) plt.show() ``` 在以上代码中,首先使用cv.imread函数读取图像,然后使用np.fft.fft2函数对图像进行傅立叶变换。接着,使用np.fft.fftshift函数将零频率分量置于中心位置,并计算幅度谱。最后,使用plt.subplot和plt.imshow函数显示原始图像和幅度谱。 请注意,上述代码中的“messi5.jpg”是一个示例图像文件的路径,你需要将其替换为你自己的图像文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rory_wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值