网格imag基本fft的Python代码

2024-05-16 23:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中对一个图像进行fft,改变转换后的图像并进行反向fft。具体地说,我有一张网格的图片,我想对它进行变换,然后将变换的中心、窄的垂直狭缝去掉,然后进行反向fft。在

我现在使用的代码,对于变换平面不做任何更改:

import os
os.chdir('/Users/terra/Desktop')
import Image, numpy
i = Image.open('grid.png')
i = i.convert('L')    #convert to grayscale
a = numpy.asarray(i)  # a is readonly

b = abs(numpy.fft.rfft2(a))

j = Image.fromarray(b)
j.save('grid2.png')

到目前为止,我收到一条错误消息:

回溯(最近一次呼叫): 文件“/Users/terra/Documents/pic2.py”,第11行,in j、 保存('grid2.png') 文件“/库/框架/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/图像.py“,第1439行,保存中 save_处理程序(self、fp、filename) 文件“/库/框架/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/PngImagePlugin.py“,第506行,in\u save raise IOError,“无法将模式%s写入PNG”%mode IOError:无法将模式F写入PNG

我对编程和傅立叶变换很陌生,所以我在网上找到的大多数相关线索都是我的头绪。非常具体的帮助非常感谢。谢谢!在


Tags: 文件inpy图像imageimportfftnumpy
1条回答
网友
1楼 · 发布于 2024-05-16 23:28:49

主要的问题是数组在FFT之后包含浮点,但是要使它对PNG输出有用,您需要有uint8s

最简单的方法是直接将其转换为uint8

b = abs(numpy.fft.rfft2(a)).astype(numpy.uint8)

这可能无法生成所需的图像,因此在将数组中的值转换为整数之前,必须以某种方式对数组中的值进行规范化。在

相关问题 更多 >