如果没有安装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)