如何在python中以块的形式读取大图像?

时间:2014-02-13 21:16:24

标签: python image image-processing numpy pytables

我正在尝试计算两个图像的像素值的差异,但我遇到了内存问题,因为我的图像非常大。有没有办法在python中我可以读取一个图像让我们一次说10x10块而不是尝试读取整个图像?我希望通过读取小块中的图像来解决内存问题,将这些块分配给numpy数组,然后使用pytables保存那些numpy数组以进行进一步处理。任何建议都将不胜感激。

此致

伯克

2 个答案:

答案 0 :(得分:4)

您可以使用numpy.memmap并让操作系统决定将图像文件的哪些部分分页或分页。如果使用64位Python,则与可用RAM相比,虚拟内存空间是天文数字。

答案 1 :(得分:1)

如果你有时间预处理图像,你可以将它们转换为位图文件(这将是大的,而不是压缩的)然后通过偏移读取文件的特定部分,如下所示:

Load just part of an image in python

可以使用以下代码在Python中完成从任何文件类型到位图的转换:

from PIL import Image
file_in = "inputCompressedImage.png"

img = Image.open(file_in)

file_out = "largeOutputFile.bmp"

img.save(file_out)