Image中resize函数报错:ValueError:image has wrong mode

img_pil_u500 = np.array(img_uint500)
im_u500 = Image.fromarray(img_pil_u500) 
im_u500r = im_u500.resize((W,H),Image.ANTIALIAS)  
im_u500r.save(outputpath+str(n)+'-raw_u500pil.tif')

因为img_uint500是np.uint16的
第三句,resample的参数只能默认为Image.NEAAREST才不会报错
一旦修改就会报错:
ValueError: image has wrong mode
但是在插值中NEAREST虽然性能最好,但是效果最差
为了不丢失掉图片中的信息,最好选一个根据自己的需要选择插值算法

解决方法:
将img_uint500的数据类型转成np.uint32的话,上述代码就能运行
生成的tif图片可以直接用scipy.misc读取,得到的数据类型是int32

个人理解的原因:
The mode of an image defines the type and depth of a pixel in the image. The current release supports the following standard modes:
1 (1-bit pixels, black and white, stored with one pixel per byte)
L (8-bit pixels, black and white)
P (8-bit pixels, mapped to any other mode using a color palette)
RGB (3x8-bit pixels, true color)
RGBA (4x8-bit pixels, true color with transparency mask)
CMYK (4x8-bit pixels, color separation)
YCbCr (3x8-bit pixels, color video format)
Note that this refers to the JPEG, and not the ITU-R BT.2020, standard
LAB (3x8-bit pixels, the Lab color space)
HSV (3x8-bit pixels, Hue, Saturation, Value color space)
I (32-bit signed integer pixels)
F (32-bit floating point pixels)

Image的mode中并不支持16bit的pixels

你可能感兴趣的:(python使用)