Склеить изображения - PullRequest
       10

Склеить изображения

3 голосов
/ 06 августа 2009

Я только что попытался использовать Google Map Buddy , чтобы получить спутниковое изображение с Google Map. Это приложение сначала загружает небольшие изображения с карты Google, а затем склеивает их в новое изображение. Мне пришлось ждать около 2 часов, чтобы загрузить изображения с моего компьютера, и, похоже, он загрузил все изображения (22 194 изображения), но затем приложение сообщило мне, что оно не может соединить их. Когда я снова запустил приложение, я подумал, что это приложение будет повторно использовать изображения на моем компе, но оно начнет загружать их снова. Поэтому мне пришлось остановить процесс и спросить вас, ребята, знаете ли вы, как я могу собрать эту головоломку.

Шаблон именования этих изображений выглядит следующим образом:

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 ]

2 голосов
/ 07 августа 2009

Вы можете использовать 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]

С помощью этих двух операций вы можете легко представить циклы для , чтобы построчно перебирать плитки.

Последнее, что вам нужно, чтобы создать большое пустое изображение (с 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 голос
/ 06 августа 2009

Процесс «склеивания изображений» обычно называется «сшивание» или «мозаичное изображение».

Я нашел список многих приложений, которые делают это в статье в Википедии - " Сравнение приложений для сшивания фотографий ".

Отредактировано: удалена ссылка на единственное приложение, которое я нашел, и заменено списком программ из Википедии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...