我正在尝试使用struct unpack将图像二进制文件读入RAM。二进制文件有120MB,每个像素用16位表示。 为了稍后进行演示,我需要将16位数据转换为float64 numpy数组...
根据我的计算,我需要在524MB RAM中读取所有数据。我的PC有8GB的RAM和4GB的免费空间,所以我认为这不是问题。
我在hgrecco的评论中读了Memory error,也许有一个结构解压缩限制。
代码如下:
PD:此处将给出总图像大小的nrows和ncols作为默认值 为简单起见,参数:
def read_BIL_img(filename, nrows = 8196, ncols = 8000):
# Open and read entire BIL data into str type named "data"
fi = open(filename, "rb")
data = fi.read()
fi.close()
# Unpack all binary data into a flat tuple, accordint to a format defined.
# It's read unsigned short integer as in https://docs.python.org/2.7/library/struct.html#format-characters.
format = "=%dH" % (int(nrows*ncols),)
img_tuple = struct.unpack(format, data)
# Convert flat tuple img into a numpy array of nrows*ncols.
img_array = np.asarray(img_tuple).reshape((nrows, ncols))
return img_array.astype(float)
我遇到以下错误:
img_tuple = struct.unpack(format, data)
MemoryError
PD 2:我在Windows 10计算机中使用python 2.7解释器和1.9.2 numpy版本。