2013-12-12 16 views
1

我试图通过脱下平面框架,它的工作减少我的大炮天文图像。但它使所有的值都很低(几乎是黑色的图片),这就是为什么我也想把它与平均值相乘的原因。但是这给了我一个错误。 (虽然没有乘法它工作。)错误减少天文图片平场PIL

有人知道为什么吗?

Traceback (most recent call last): File "D:\astro\10-12\moon\fits\red.py", line 16, in img = Image.fromarray(imarray) File "C:\Python27\lib\site-packages\PIL\Image.py", line 1886, in fromarray raise TypeError("Cannot handle this data type") TypeError: Cannot handle this data type

这是我的代码

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

在乘法之前和之后检查'imarray.shape',按照http://stackoverflow.com/questions/7700193/pil-cannot-handle-this-data-type – lnmx

+0

>>> >>> imarray = np.array( IM) >>> imarray.shape (2848,4272,3) >>>平均= np.average(imarray) >>> imarray =(imarray/flatarray)*平均 >>> imarray.shape (2848,4272,3)' 形状没有随我改变 – Coolcrab

+1

也许是数据类型/范围的问题?在fromarray之前检查'imarray.dtype',然后尝试'imarray = numpy.uint8(imarray)'。 – lnmx

回答

1

PIL的Image.fromarray()支持输入类型/信道组合的一个有限的范围内(参见PIL/Image.py,构件_fromarray_typemap)。

从TIF文件加载的原始imarray具有3个8位整数值(字节)通道。

在你的情况下,图像的平均值产生一个浮点值,当它与图像数据相乘时,它会为所有像素生成浮点值。

要使fromarray正常工作,需要使用np.uint8(...)将像素值强制回字节值。