0

我正在使用 python 脚本将大图像(10000 x 10000 像素)连续拼接在一起。我可以一次将八幅图像中的前六幅拼接在一起,绝对没问题。但是,当我在这一点之外缝合更多图像时,我得到“Python.exe 已停止工作”。

下面的代码:

from PIL import Image
import getopt, sys

args = sys.argv
ImageFileList = []
MasterWidth = 0
MasterHeight = 0
filename = ""
row = True

print """
Usage: python imageconnector.py  [OPTIONS] [FILENAME] [FILE1] [FILE2] ...[FILE...]...
Combines [FILE1,2,...] into one file called [FILENAME]

OPTIONS:

-o <r/c>        Stitch images into a row or a column. Default is row.
-c <colour>     Change background fill colour. Default is black.

"""

def main(argv):
    global args, MasterWidth, MasterHeight, ImageFileList, filename, deletename
    try:
        opts, args_files = getopt.getopt(argv, 'o:c:')
    except getopt.GetoptError:
        print "Illegal arguments!"
        sys.exit(-1)

    if '-o' in args:
        index = args.index('-o')
        cr = args[index + 1]

        if cr == 'r':
            row = True

    elif cr == 'c':
        row = False

    else:
        row = True

    if '-c' in args:
        index = args.index('-c')
        colour = args[index + 1]

    else:
        colour = 'black'

    filename = args_files.pop(0)

    print('Combining the following images:')
    if row:
        for x in args_files:

            try:
                im = Image.open(x)
                print(x)


                MasterWidth += im.size[0]
                if im.size[1] > MasterHeight:
                    MasterHeight = im.size[1]
                else:
                    MasterHeight = MasterHeight


                ImageFileList.append(x)  
            except:
                raise

        final_image = Image.new("RGB", (MasterWidth, MasterHeight), colour)
        offset = 0
        for x in ImageFileList:
            temp_image = Image.open(x)
            final_image.paste(temp_image, (offset, 0))
            offset += temp_image.size[0]

        final_image.save(filename)
    else:
        for x in args_files:

            try:
                im = Image.open(x)
                print(x)


                MasterHeight += im.size[1]
                if im.size[0] > MasterWidth:
                     MasterWidth = im.size[0]
                else:
                    MasterWidth = MasterWidth


                ImageFileList.append(x)  
            except:
                raise
        final_image = Image.new("RGB", (MasterWidth, MasterHeight), colour)
        offset = 0
        for x in ImageFileList:
            temp_image = Image.open(x)
            final_image.paste(temp_image, (0, offset))
            offset += temp_image.size[1]

        final_image.save(filename)

if __name__ == "__main__":
  try:
    main(sys.argv[1:])
  except IOError:
    print 'One of more of the input image files is not valid.'
    sys.exit(-1)

  except SystemExit:
    pass

  except ValueError:
    print 'Not a valid colour value.'
4

1 回答 1

0

答案是 Python 图像库 (PIL) 是 32 位的。我使用了更新的 Pillow 库(http://www.lfd.uci.edu/~gohlke/pythonlibs/thb9cnq7/Pillow-2.5.3.win-amd64-py2.7.exe),它运行良好。使用大量内存来拼接 60k 像素的图像!

于 2014-08-30T15:25:16.493 回答