将图像粘在一起

时间:2009-08-06 17:51:38

标签: google-maps image image-processing batch-file

我只是尝试使用Google Map Buddy从Google地图获取卫星图像。此应用程序首先从谷歌地图下载小图像,然后将它们粘在一起成为新的图像。我不得不等待大约2个小时才能让图像下载我的电脑,它看起来像是下载了所有图像(22,194图像)但是应用程序告诉我它不能将它们粘在一起。当我再次启动应用程序时,虽然此应用程序将重用我的comp上的图像,但它会再次开始下载它们。所以我不得不停止这个过程并问你们,伙计们,如果你知道如何将这个难题放在一起。

这些图像的命名模式如下:

x=92651y=48130zoom=17.png
x=92652y=48130zoom=17.png
x=92653y=48130zoom=17.png
x=92654y=48130zoom=17.png
x=92655y=48130zoom=17.png
...
...
x=92664y=48131zoom=17.png
x=92665y=48131zoom=17.png
x=92666y=48131zoom=17.png
x=92667y=48131zoom=17.png
...
...
x=92689y=48132zoom=17.png
x=92690y=48132zoom=17.png
x=92691y=48132zoom=17.png
x=92692y=48132zoom=17.png
x=92693y=48132zoom=17.png

如何使用一些简单的脚本语言以编程方式将它们组合在一起?我可以访问Mac和Windows系统,可以安装任何简单的脚本语言。

由于

2 个答案:

答案 0 :(得分:2)

您可以将PythonPython Imaging Library (PIL)一起使用。

首先,我要列出文件名及其坐标。使用正则表达式从文件名中提取整数坐标,并将它们存储在字典列表中:

>>> filename = 'x=92664y=48131zoom=17.png'
>>> imagePattern = re.compile(r'^x=(\d{5})y=(\d{5})zoom=17.png$')
>>> x,y = map(int, imagePattern.search(filename).groups())
>>> {'x':x, 'y':y, 'filename':filename}
{'y': 48131, 'x': 92664, 'filename': 'x=92664y=48131zoom=17.png'}

拥有一个词典列表使您可以根据任一维度对它们进行排序:

tileListSortedByX = sorted(tileList, key = lambda i: i["x"])

并过滤它们:

fileListWhereX48131 = [tile for tile in tileList if tile["x"]==48131]

通过这两个操作,您可以轻松地想象 for 循环逐行遍历切片。

您需要创建一个大的空图像(使用PIL),然后将小图块图像粘贴到其中。它的大小将是瓷砖大小的倍数。

>>> from PIL import Image
>>> bigImage = Image.new('RGB',(300,300),(255,255,255))
    #creates a white 300x300 image

将小图像粘贴到大图像中是这样的:

>>> smallImage = Image.open(tile["filename"])
>>> bigImage.paste(smallImage,(0,0))   

希望你明白这一点。

答案 1 :(得分:1)

“将图像粘在一起”的过程通常称为“拼接”或“镶嵌”。

我在Wikipedia文章 - “Comparison of Photo Stitching Applications”上找到了许多应用程序的列表。

编辑:删除我发现的单个应用程序的链接,并替换为维基百科软件列表。