亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-02 15:20:37 來源:腳本之家 閱讀:693 作者:sh39o 欄目:開發技術

目標:目標文件為一個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模型下的波場快照):

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

不需要坐標軸的信息,直接使用imsave命令,使用cmap選定顏色格式即可。

plt.imsave('output.tiff', img, format='tiff', cmap=plt.cm.gray)

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郯城县| 鸡泽县| 曲周县| 沈阳市| 肥西县| 梧州市| 安义县| 克山县| 乌兰县| 屏南县| 呈贡县| 廉江市| 象州县| 琼中| 盘锦市| 桂平市| 玛多县| 涞源县| 广德县| 浮梁县| 监利县| 永泰县| 孟津县| 双辽市| 北京市| 高雄市| 遂昌县| 林西县| 吉木乃县| 天等县| 二连浩特市| 河曲县| 区。| 贵溪市| 安顺市| 巨野县| 湟源县| 辰溪县| 崇州市| 漾濞| 通辽市|