如何用Python将多份TIFF文件合并为单张多波段(3D栅格)图像
解决方案
合并单波段TIFF为多波段图像的核心是统一空间参数、堆叠波段数据并写入新文件,以下是完整实现方案:
关键前提
所有要合并的单波段TIFF必须具有完全一致的空间参数:包括投影坐标系(CRS)、地理变换矩阵(transform)、图像宽高、数据类型(dtype),否则合并后会出现错位或数据错误。
完整代码实现
import rasterio import numpy as np # 1. 列出所有要合并的单波段TIFF路径 band_file_paths = [ "path/to/band1.tif", "path/to/band2.tif", "path/to/band3.tif" # 按需添加更多波段文件 ] # 2. 从第一个波段读取元数据,作为输出文件的配置模板 with rasterio.open(band_file_paths[0]) as first_band: output_meta = first_band.meta.copy() # 更新元数据的波段数为总波段数量 output_meta["count"] = len(band_file_paths) # 3. 读取所有波段数据并堆叠为3D数组(形状:(波段数, 图像高度, 图像宽度)) band_data_list = [] for file_path in band_file_paths: with rasterio.open(file_path) as band_src: # 读取单波段数据(read(1)返回2D数组) band_data = band_src.read(1) band_data_list.append(band_data) # 转换为numpy 3D数组 combined_array = np.stack(band_data_list) # 4. 创建并写入多波段TIFF文件 output_file = "path/to/combined_multiband.tif" with rasterio.open(output_file, 'w', **output_meta) as dst: dst.write(combined_array)
补充说明
- 你的原始思路可行,但直接复用第一个波段的元数据(而非样本文件)更可靠,能避免参数不匹配问题
- 如果输入TIFF空间参数不一致,需先用
rasterio.warp模块对所有波段做重投影/重采样,统一参数后再合并 - 若需保留nodata值,确保元数据中的
nodata参数正确传递到输出文件
内容的提问来源于stack exchange,提问作者Shrey Mehwala
相关产品推荐
相关产品推荐

