python 如何从二进制数据BSQ创建图像?

iqih9akk  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(163)

我遇到了一个问题。我正在尝试创建图像从二进制数据,我从超光谱相机。我有文件是在BSQ uint16格式。从文档中,我发现图像包含在文件中(.dat)的分辨率为1024x1024,总共有24张图片,整个事情就是形成一种“立方体”我希望将来能用它来制作多层的正镶嵌图案。
我还想补充的是,我是一个完全新的Python,但我试图与我所需要的一切都是最新的。我希望我所写的一切都是清晰和可理解的。
一开始我尝试使用Numpy liblary来创建3D阵列,但最终得到了随机像素的排列。

from PIL import Image
import numpy as np

file=open('Sequence 1_000021.dat','rb')

myarray=np.fromfile(file,dtype=np.uint16)

print('Size of new array',":", len(myarray))

con_array=np.reshape(myarray,(24,1024,1024),'C')

naPIL=Image.fromarray(con_array[1,:,:])
naPIL.save('naPIL.tiff')

结果:enter image description here
我想获得的图像示例(缩略图):enter image description here

vfh0ocws

vfh0ocws1#

正如所怀疑的,这只是字节顺序,当在Jupyter笔记本中运行以下代码时,我得到了一个看起来很明智的图像:

import numpy as np
from PIL import Image

# open as big-endian, convert to native order, then reshape as appropriate
raw = np.fromfile(
  './Sequence 1_000021.dat', dtype='>u2'
).astype('uint16').reshape((24, 1024, 1024))

# display inline
Image.fromarray(raw[1,:,:])

相关问题