图像处理MemoryError

时间:2014-09-30 12:05:46

标签: python image memory image-processing python-2.2

我正在尝试使用python脚本编辑大量图像。图像数量变化很大,当只有少量图像(10-20)时,一切正常,我没有任何错误。当图像数量增加(100-200)时,会发生奇怪的事情。当我直接运行脚本时,我没有得到任何错误,一切都运行良好。当我从另一个脚本调用脚本时,会发生MemoryError 一般过程:
  - 检查文件名
  - 匹配.txt文件读取和变量设置
  - 在图像上绘制矩形
  - 保存图片

脚本:

import Image,ImageDraw, os, time, sys
def main() :
    print('*****************************************')
    print('     Draw_Rectangle v1.2                 ')
    print('*****************************************')
    print(' ')
    start= time.time()
    print(' ')
    print('Starting drawing rectangles...')
    path = os.path.join("C:\Program Files\test\images")
    fileList = os.listdir(path)
    total = len(fileList)
    count = 0
    for fileName in fileList :
        if fileName.endswith("FULL.png") :
            ins = open(os.path.join(path,fileName[:-9]+".txt"), "r")
            for line in ins :
                if line[0] == "x" :
                    x = line[2:]
                if line[0] == "y" :
                    y = line[2:]
                if line[0] == "w" :
                    w = line[2:]
                if line[0] == "h" :
                    h = line[2:]
                    break
            ins.close()
            im = Image.open(os.path.join(path,fileName))
            draw=ImageDraw.Draw(im)
            draw.rectangle([int(x),int(y),int(x) + int(w),int (y) + int(h)],outline="#0000FF")
            draw.rectangle([int(x)-1,int(y)-1,int(x) + int(w)-1,int (y) + int(h)-1],outline="#0000FF")
            draw.rectangle([int(x)+1,int(y)+1,int(x) + int(w)+1,int (y) + int(h)+1],outline="#0000FF")
            im.save(os.path.join(path,fileName),"PNG")
            count+=4
            percentage = (count * 100) / total
            print 'Progress : [%d%%]\r'%percentage,
    duration= time.time()-start
    print('Progress : [100%]')
    print(' ')
    print('Drawing rectangles completed')
    print(' ')
    print('Duration : ' + str(duration) + ' seconds')
    return 0

if __name__ == "__main__":
    main()

从其他脚本调用脚本的代码行:

os.system(r'python.exe -u "C:\Scripts\Draw_Rectv2.py"')

总结一下: 我试图在图像上绘制矩形,当我正常运行脚本时,我没有得到任何错误。当我从其他脚本调用它时,我得到了

ExceptionInOtherThread(Exception in other Thread - MemoryError)

亲切的问候, 价

1 个答案:

答案 0 :(得分:0)

奇。 PIL docs没有提及您需要在图片上调用的任何关闭/销毁/处置方法。我也没有在您的代码中看到任何其他内存泄漏。最后一个可能的问题是其中一个图像非常大或包含Zip Bomb

要查看其中一个图像是否存在问题,请在处理图像时记录图像名称(带完整路径)。这样,您可以查看代码尝试处理的最后一个图像。