我只是尝试使用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系统,可以安装任何简单的脚本语言。
由于
答案 0 :(得分:2)
您可以将Python与Python 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”上找到了许多应用程序的列表。
编辑:删除我发现的单个应用程序的链接,并替换为维基百科软件列表。