首先,我这里用的bin文件为一个存储深度的深度文件,深度即距离。
读取二进制文件,首先要明确二进制文件中内部结构为什么样子,我这个二进制文件流是两个字节为一个数字,并且整个bin文件中前四个字节代表图片的分辨率,宽和高。
将bin文件转换为可读数据代码为(想要了解以下struct.unpack,可以再百度一下,这个是关键):
int_data = struct.unpack('H', bin_data)
具体代码如下所示:
import os
import numpy as np
import struct
def get_depth_img(file_path):
"""
获取深度图中心10*10平均距离
:param file_path: 深度图目录
:return: 深度距离
"""
file_long = os.path.getsize(file_path) # 获取文件中二进制字符长度
with open(file_path, "rb") as f:
data = []
width = bin2int(f.read(2))[0] # 获取图片分辨率(宽、高)
height = bin2int(f.read(2))[0]
for i in range(1, file_long - 4, 2):
data.append(bin2int(f.read(2)))
data = np.array(data)
data = data.reshape(width, height) # 将数据整合为二维数组格式
h1 = int(((width - 10) / 2) - 1)
h2 = int(h1 + 10)
w1 = int(((height - 10) / 2) - 1)
w2 = int(w1 + 10)
data = data[h1: h2, w1: w2] # 获取图片中心10*10数据
mean_data = np.mean(data) # 将中心数据取平均
return mean_data
def bin2int(bin_data):
"""
将二进制字符转换为int字符
:param bin_data: 二进制字符
:return:int字符
"""
int_data = struct.unpack('H', bin_data)
return int_data
if __name__ == '__main__':
mean_depth = get_depth_img("G:\PYTHON1\\bin\\abc.bin")
print(mean_depth)