2015-09-30 2 views
1

Я пытаюсь написать код на Python, который будет складывать 5 растровых растровых изображений, которые все перечислены последовательно в папке, а затем выводят собранные изображения в новую папку. Мой первый инстинкт заключался в том, чтобы автоматизировать какую-то структуру петли в дуге с помощью сложного инструмента диапазона.Пакетная обработка растровых изображений с помощью Arcpy

Я хотел бы помочь со следующими вещами:

  1. У меня возникли проблемы, как начать работу с для цикла. Любые предложения о том, как подойти к этому?

    import arcpy 
    arcpy.env.workspace = ".\\" 
    outws = "Stacked_Images_Folder" 
    
    for rasters in folder: 
        band1 = 
        band2 = 
        band3 = 
        band4 = 
        band5 = 
    
        arcpy.CompositeBands_management("band1.tif;band2.tif;band3.tif; 
        band4.tif, band5.tif","stacked_img.tif") 
    
  2. Я пытаюсь выяснить, как скрипт будет знать, чтобы перейти к новому образу после укладки 5 полос. Нужно ли сортировать изображения в отдельных папках перед началом или есть обход, например. код знает, чтобы перейти к следующему изображению после достижения 5 полос?

+0

В настоящее время информации по вашему вопросу недостаточно. Какова структура 'folder'? Есть ли причина, по которой вы включаете 'arcpy.Composite ....' в цикл for? –

+0

Структура папок последовательно отображает полосы изображений: img1-b1, img1-b2, img1-b3, img1-b4, img1-b5, img2-b1 ... Я не уверен, где инструмент композитной полосы должен быть помещен в код, я просто предположил, что он будет частью цикла, поскольку цикл предназначен для применения инструмента к каждому набору из 5 диапазонов. – Josh

ответ

0

Вам не нужно для цикла, чтобы сделать это, если ваши растры все в той же папке:

import arcpy 
wd="Y:/" #have this as your directory where all rasters are located 
arcpy.env.workspace = wd 
raster_list=arcpy.ListRasters("", "tif") 
arcpy.CompositeBands_management(raster_list,"stacked_img.tif") #will save output on the same folder specified above. 

Если вы хотите сохранить его в новый подкаталог:

import os 
outws = wd+"Stacked_Images_Folder/" 
os.makedirs(outws) 
arcpy.CompositeBands_management(raster_list, outws + "stacked_img.tif") 

Теперь, если у вас есть несколько наборов растров для слияния в той же папке, где есть общее имя исходного файла, например img1-b1, img1-b2 и т. Д., Вы можете сделать весь процесс работой со следующей простой реализацией:

import arcpy 
image_names=["img" + str(s) for s in range(1,143)] 
wd="Y:/" #have this as your directory where all rasters are located 
arcpy.env.workspace = wd 
for image_name in image_names: 
    print image_name 
    raster_list=arcpy.ListRasters(image_name+"-*", "tif") 
    import os 
    outws = wd+"Stacked_Images_Folder/" 
    os.makedirs(outws) 
    arcpy.CompositeBands_management(raster_list, outws + image_name+ "_stacked_img.tif") 
+0

Один вопрос здесь - я не пытаюсь создать одно растровое изображение из всех этих диапазонов. Я пытаюсь создать 143 5-полосных растровых изображений (в моей папке есть 715 5-полосных изображений). – Josh

+0

Извините, но это непонятно из исходного вопроса. Я обновил код, чтобы он работал. –

+0

Спасибо за помощь, но я все еще получаю и ошибки на последней строке. Ошибка читает «Input Rasters: значение требуется», а также ошибка, что параметры недействительны. – Josh

Смежные вопросы