Python中多步图像的可用内存

时间:2016-09-12 06:30:29

标签: python image python-2.7 memory

我在Windows 2.7上的Python 2.7中存在内存问题。

我已经获得了数千张图片(tiff格式)。然后我想重建整个对象。我的代码的第一部分通过提取稍后使用的一些元数据而工作得很好。

图像文件夹的大小为1.1 GB,最终图像的大小大致相同。我循环通过图像重建我的最终图像。 麻烦来自几百次迭代后,Python使用的内存突然开始增加,达到100%32 GB RAM!)。它设法完成,但计算机冻结了几分钟。有一天,我需要操纵更大的图像文件。

我尝试使用timeit模块找到问题,垃圾收集(示例代码)并优化我的代码(使用numpy),但没有成功。

所以我想知道它们是否是python中一堆图像处理的一些技巧,或者其他一些强制释放内存的方法,如果可能的话不使用子进程模块。

以下是导致我遇到麻烦的代码部分:

import gc
garbage = []

ImageSize = np.array((mean.shape), dtype = np.int16)             #Classical image size

RecontructImage = np.zeros((Xlgth*ImageSize[0], Ylgth*ImageSize[1]), dtype=np.int16)     #final image
for x in range(len(ImageList)):
    image1 = Image.open(mypath+'/'+ImageList[x])
    image = np.array(image1, dtype = np.int16)                   #transform image to array
    image1.close()
    image = SingleImageTreatment(image)                          #Image modification
    pos = np.array((PositionCoordonate[x][0]*image.shape[0], PositionCoordonate[x][1]*image.shape[1])) #Extract coordinate of the image
    RecontructImage[pos[0]:pos[0]+image.shape[0], pos[1]:pos[1]+image.shape[1]] = image            #Put the image in the global image
    image, image1 = None, None                                   #un-allocated for garbage
    garbage.append(gc.get_count())
    gc.collect()

1 个答案:

答案 0 :(得分:0)

对我来说都是耻辱。 错误不在我发布的代码中。但是在下一行。

plt.imshow(ReconstructImage)

我使用matplotlib.pyplot(又名plt)进行预可视化。函数imshow()非常需要内存,使计算机冻结。我删除了该行,没有更多麻烦。

我遇到麻烦的最佳答案:Excessive memory usage in Matplotlib imshow。通过指向详细信息here的链接。

下次我需要帮助时,我会花时间制作一个能够重现问题的独立代码。