python读取⼆进制⽂件并画图_使⽤Python读取⼆进制⽂件的
实例讲解
⽬标:⽬标⽂件为⼀个float32型存储的⼆进制⽂件,按列优先⽅式存储。本⽂使⽤Python读取该⼆进制⽂件并使⽤.pyplot相关⼯具画出图像
⼯具:Python3, matplotlib,os,,numpy
1. 读取⼆进制⽂件
⾸先使⽤open函数打开⽂件,打开模式选择⼆进制读取"rb"。
f = open(filename, "rb")
第⼆步,需要打开按照⾏列读取⽂件,由于是纯⼆进制⽂件,内部不含邮任何的数据结构信息,因此我们需要给定⼆进制数据的⾏数列数(nx和ny)来确定图像的形状。这⾥我们的数据类型是float32型的,对应过来是4bytes,使⽤for循环逐个read4个字节。
for i in range(nx):
for j in range(ny):
data = f.read(4)
得到的结果如下:
b'5x9dx82xc3'
b'xb1x04x10xc4'
b'xc1x9eDxc4'
b'ax86Rxc4'
b'x15x01=xc4'
可以看到,读⼊的数据为⼗六进制数,这个时候的数据并不能直接⽤来画图,需要转换为float32型。这⾥使⽤struct.unpack来转译
data_float = struct.unpack("f", data)[0]
就可以得到正确的结果了
python怎么读取桌面上的文件-261.2281799316406
-576.0733032226562
-786.4805297851562
-842.0996704101562
-756.0169067382812
建⽴⼀个数组,将读⼊的数据分别按列优先的⽅式放⼊数组,就完成了图像读⼊的操作。
将上述操作包装成函数,代码如下:
def xshow(filename, nx, nz):
f = open(filename, "rb")
pic = np.zeros((nx, nz))
for i in range(nx):
for j in range(nz):
data = f.read(4)
elem = struct.unpack("f", data)[0]
pic[i][j] = elem
f.close()
return pic
2. 画出图像
这⾥我们的⽬的是将矩阵输出灰度图,并保存为tiff格式的图像,效果图如下(该图为使⽤弹性波波动⽅程在Marmousi模型下的波场快照):
不需要坐标轴的信息,直接使⽤imsave命令,使⽤cmap选定颜⾊格式即可。
plt.imsave('output.tiff', img, format='tiff', ay)
如果使⽤PIL库读取图像,可能会得到不同的效果,可能需要做直⽅图均衡,⽬前还没有到原因。
以上这篇使⽤Python读取⼆进制⽂件的实例讲解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持脚本之家。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。