我试图通过取下有效的平面框来减少我的大炮天文图像。但它使所有的值都非常低(所以几乎是黑色的图片),这就是为什么我也想把它与平均值相乘。但是这给了我一个错误。 (虽然没有乘法,但它有效。)
有人知道为什么吗?
Traceback(最近一次调用最后一次):文件 “D:\ astro \ 10-12 \ moon \ fits \ red.py”,第16行,in img = Image.fromarray(imarray)文件“C:\ Python27 \ lib \ site-packages \ PIL \ Image.py”,第1886行,fromarray 提出TypeError(“无法处理此数据类型”)TypeError:无法处理此数据类型
这是我的代码
import Image
import numpy as np
im = Image.open('8bit/DPP_0001.TIF')
flat = Image.open('8bit/flat2.TIF')
#im.show()
imarray = np.array(im)
flatarray = np.array(flat)
avg = np.average(imarray)
imarray = (imarray/flatarray)*avg
img = Image.fromarray(imarray)
img.save("done/aap.png","png")
答案 0 :(得分:1)
PIL的Image.fromarray()
支持有限范围的输入类型/频道组合(请参阅PIL/Image.py
,成员_fromarray_typemap
)。
从TIF文件加载的原始imarray
有3个8位整数值(字节)通道。
在您的情况下,图像的平均值产生一个浮点值,当它与图像数据相乘时,它产生所有像素的浮点值。
要使fromarray
生效,您需要使用np.uint8( ... )
将像素值强制回字节值。