【发布时间】:2015-10-10 09:33:31
【问题描述】:
我有一个不适合我的 ram 的大图像文件(单波段)。
我想将它读取为 numpy 数组(数据)并使用 matplotlib 绘制它,可能使用imshow(data)。我知道如何为小尺寸图像做这件事。但是我该如何处理大文件呢?当然,在绘图之前重新采样(可能是 scipy 缩放)是可以的。但是如何在读取为 numpy 数组之前对其进行重新采样,因为无法将大文件读入内存。
【问题讨论】:
-
您的图像是什么格式...是灰度值的 CSV,每 csv 行一个图像行?
-
@maxymoo 这是 geotiff
-
@Borys 根据您加载图像的方式,您可以尝试使用内存映射文件:docs.python.org/2/library/mmap.html(或 numpy 等效文件:docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html)
-
@kazemakase 听起来很有趣!我正在使用
imread读取图像文件。但是无法想象如何应用memmap?你能显示一些代码吗? -
@Borys 我自己没有在 Python 中使用过内存映射文件。我只是认为它可能对您有用 :) 文档说
mmap的行为类似于文件对象,而imread帮助说您可以将文件对象传递给它。我想有可能用你的文件名构造一个 mmap 对象,并将这个对象传递给 imread。无法帮助您超出这一点,对不起...
标签: image-processing numpy matplotlib scipy bigdata