【发布时间】:2019-04-28 18:47:09
【问题描述】:
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]
【问题讨论】:
-
您能否添加一个可重现的示例,或者至少为您的问题添加更多细节?它是压缩的 TIFF 图像吗?你是如何打开图片的,你怎么知道 Pillow 正在以浮动方式打开图片?
-
查看添加的示例代码。
-
但请注意,我的问题无论如何都是通用的(不依赖于 TIF 文件):一般来说,如何改变 Python 数据结构中二进制数据的解释(例如,一个numpy数组)?
-
经过一些测试,似乎 32 位浮点数是灰度图像的有效 TIFF 格式。 TIFF 文件是否可能实际上是浮动的并且 Pillow 和 numpy 正在做正确的事情?尝试绘制数组以查看它是否再现了图像。
-
至于像在 C 中那样转换数据结构,您可以使用 Python
struct模块。
标签: python image types binary type-conversion