国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python讀取二進制文件的實例講解

2020-02-15 22:15:43
字體:
來源:轉載
供稿:網友

目標:目標文件為一個float32型存儲的二進制文件,按列優先方式存儲。本文使用Python讀取該二進制文件并使用matplotlib.pyplot相關工具畫出圖像

工具:Python3, matplotlib,os,struct,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'5/x9d/x82/xc3'b'/xb1/x04/x10/xc4'b'/xc1/x9eD/xc4'b'a/x86R/xc4'b'/x15/x01=/xc4'

可以看到,讀入的數據為十六進制數,這個時候的數據并不能直接用來畫圖,需要轉換為float32型。這里使用struct.unpack來轉譯

data_float = struct.unpack("f", data)[0]

就可以得到正確的結果了

-261.2281799316406-576.0733032226562-786.4805297851562-842.0996704101562-756.0169067382812

建立一個numpy數組,將讀入的數據分別按列優先的方式放入數組,就完成了圖像讀入的操作。

將上述操作包裝成函數,代碼如下:

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', cmap=plt.cm.gray)

如果使用PIL庫讀取圖像,可能會得到不同的效果,可能需要做直方圖均衡,目前還沒有找到原因。

以上這篇使用Python讀取二進制文件的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丁青县| 新巴尔虎右旗| 玛曲县| 开封市| 漾濞| 六盘水市| 吴桥县| 中方县| 民勤县| 河曲县| 武平县| 襄樊市| 巴东县| 汝州市| 四子王旗| 海阳市| 浦城县| 阿合奇县| 湘西| 茂名市| 南雄市| 壶关县| 永济市| 赤壁市| 胶州市| 庄浪县| 温泉县| 宣化县| 镶黄旗| 花垣县| 光泽县| 罗田县| 龙州县| 遂宁市| 江安县| 卢氏县| 湘西| 云林县| 兴化市| 锡林郭勒盟| 莫力|