将float32转换为等价的int32

时间:2018-11-27 04:21:08

标签: python image types binary type-conversion

Python中的Pillow模块坚持要打开一个我拥有的32位/像素TIFF文件,就好像像素是float32类型一样,而我相信正确的解释是unsigned int32。如果我继续将数据加载到float32类型的640x512数组中,如何在保留基础二进制表示形式的同时将其重新键入为uint32?

在Fortran和C中,很容易使不同类型的指针或数据结构指向相同的物理内存块,以便可以根据我想要的任何类型轻松地解释原始内存的内容。 Python中有等效的过程吗?

后面是示例(请注意,我没有有关压缩等的信息;该文件是由商业软件程序从专有文件格式中提取的):

from PIL import Image

infile = "20181016_071207_367_R.tif"        
im = Image.open(infile)

data = np.array(im.getdata())
print(data)
  

[-9.99117374 -10.36103535 -9.80696869 ... -18.41988373 -18.35027885    -18.69905663]

2 个答案:

答案 0 :(得分:1)

假设您最初拥有<p><br></p>等于im.mode,则可以强制Pillow以不同的方式(确实是非常不寻常的愿望)以某种有点怪异的方式重新加载相同的数据:

F

更一般而言(在PIL上下文之外),每当遇到需要处理Python中的原始内存表示形式时,通常都应依赖imnew = im.convert(mode='I') imnew.frombytes(im.tobytes()) 或Python内置的numpy类, memoryview模块。

这里是将numpy struct的数组重新解释为float32的示例:

int32

以下是使用a = np.array([1.0, 2.0, 3.0], dtype='float32') a_as_int32 = a.view('int32') 进行此操作的示例:

memoryview

答案 1 :(得分:0)

在这种情况下,答案是Pillow正在使用从热像仪导出的图像中指定的正确类型(浮点32)加载图像。无需将图像转换为整数,否则将导致错误的结果。

相关问题