如何遍历子文件夹以在每个子文件夹中组合各自的栅格波段并将结果保存到单独的文件夹中?

时间:2019-01-25 20:26:59

标签: python iteration raster

*编辑:找到答案。必须将波段分配保留在For循环内,并确保将它们视为栅格。代码已正确固定。

我有数百张正在监控植物生长速度的图像。为此,我建立了校准相机的代码,批量消除了图像上的失真,对其进行投影和缩放,然后将图像分为各个波段分量,因此(“ redband.jpg”,“ greenband.jpg”, “ blueband.jpg”)。我为图像预处理的每个步骤创建了一个新文件夹。现在,这些单独的波段和原始合成图像包含在一个文件夹中,该文件夹分配了与原始图像相同的名称(例如C:/Bands/run1_1_/run1_1_.jpg”。我需要组合各个波段以创建各种索引。例如,多余的绿色= 2 * greenband-redband-blueband。需要为每个文件夹中的每个单独波段集创建索引,然后将其输出到新文件夹(例如“ C:/Indices/ExcessGreen/run1_1_ExGr.jpg”),确保每个结果仍然包含原始图像名称(这在图像处理的每个步骤中都是一致的)我发现了一些问题,这些问题可以回答文件夹中的循环问题,但是没有一个问题解决了到达该文件夹后需要对多个文件执行多个步骤的问题。我目前能够一次执行一个文件夹的任务。 我还考虑过将所有图像都放在一个大文件夹中,然后将其拆分到那里,但是我不确定这是否是最好的选择。 注意:第一次发布代码时,如果格式不正确,请您道歉。

import glob, os, cv2, shutil, arcpy
from arcpy.sa import *

sourcefolder = "C:/Users/FarineauA/Desktop/PYTHON_MASTER/EXPERIMENT_TYPE/GROWTH_CHAMBER/4.Projected_Scaled"
for file_path in glob.glob(os.path.join(sourcefolder, '*.*')):
    new_dir = file_path.rsplit('.',1)[0]
    os.mkdir(os.path.join(sourcefolder, new_dir))
    shutil.move(file_path, os.path.join(new_dir, os.path.basename(file_path)))

for images in list(glob.glob("C:/Users/FarineauA/Desktop/PYTHON_MASTER/EXPERIMENT_TYPE/GROWTH_CHAMBER/4.Projected_Scaled/**/*.jpg")):
    img = cv2.imread(images)
    b,g,r = cv2.split(img)
    cv2.imwrite(os.path.splitext(images)[0] + "Band_3" + ".jpg", b)
    cv2.imwrite(os.path.splitext(images)[0] + "Band_2" + ".jpg", g)
    cv2.imwrite(os.path.splitext(images)[0] + "Band_1" + ".jpg", r)
    Band_1 = arcpy.Raster("Band_1.jpg")
    Band_2 = arcpy.Raster("Band_2.jpg")
    Band_3 = arcpy.Raster("Band_3.jpg")
    ExG = ((Float(Band_2)*2)-Band_1-Band_3)
    outRaster = (os.path.splitext(images)[0] + "ExG" + ".tif")
    print(outRaster)
    ExG.save(outRaster)

for images in list(glob.glob("C:/Users/FarineauA/Desktop/PYTHON_MASTER/EXPERIMENT_TYPE/GROWTH_CHAMBER/4.Projected_Scaled/**/*.tif")):
    shutil.move(images, "C:/Users/FarineauA/Desktop/PYTHON_MASTER/EXPERIMENT_TYPE/GROWTH_CHAMBER/5.Indices")

0 个答案:

没有答案