rasterio遥感图像裁剪

如果没有安装rasterio

pip install rasterio

使用方法需要改动input_dir、output_dir
如有需要可以修改window_size(裁剪图片大小)和overlap(重叠度)

import rasterio
from rasterio.windows import Window
import os
from tqdm import tqdm
def clip(input_path,outputdir,window_size = 896,overlap = 128):

    # 读取遥感图像
    raster = rasterio.open(input_path)
    # 计算裁剪窗口的数量
    num_windows_x = (raster.width - window_size) // (window_size - overlap) + 1
    num_windows_y = (raster.height - window_size) // (window_size - overlap) + 1

    # 遍历每个裁剪窗口并保存裁剪后的图像
    for i in range(num_windows_x):
        for j in range(num_windows_y):
            # 计算裁剪窗口的位置
            window = Window(
                col_off=i * (window_size - overlap),
                row_off=j * (window_size - overlap),
                width=window_size,
                height=window_size
            )

            # 裁剪遥感图像
            out_image = raster.read(window=window)

            # 更新元数据并保存裁剪后的图像
            out_meta = raster.meta.copy()
            out_meta.update({
                "height": out_image.shape[1],
                "width": out_image.shape[2],
                "transform": rasterio.windows.transform(window, raster.transform),
                # "driver":'PNG'
            })
            num = len(os.listdir(outputdir))+1
            outputpath = os.path.join(outputdir,str(num)+'.tif')
            with rasterio.open(outputpath, 'w', **out_meta) as dest:
                dest.write(out_image)

def main(input_dir,output_dir,window_size,overlap):
    if not os.path.isdir(output_dir):
        os.makedirs(output_dir)
    for filename in tqdm(os.listdir(input_dir)):
        if filename.split('.')[-1] in ['tif','png','jpg']:
            filepath = os.path.join(input_dir,filename)
            clip(filepath,output_dir,window_size,overlap)

if __name__ == '__main__':
    input_dir = r'D:\desktop\gfshuoming\nongyers\img_dir'
    output_dir = r'D:\desktop\gfshuoming\nongyers\img_dir_clip_2'
    if not os.path.isdir(output_dir):
        os.makedirs(output_dir)
    window_size = 896
    overlap = 128
    main(input_dir,output_dir,window_size,overlap)

你可能感兴趣的:(python)