我有一个numpy数组,其形状是(7703,7703,9)
我想导出这个数组到7700行x7703列与9个分离的波段geoTiff图像使用gdal。
def CreateGeoTiff(outRaster, data, geo_transform, projection):
driver = gdal.GetDriverByName('GTiff')
rows, cols, no_bands = data.shape
DataSet = driver.Create(outRaster, cols, rows, no_bands, gdal.GDT_Byte)
DataSet.SetGeoTransform(geo_transform)
DataSet.SetProjection(projection)
for i, image in enumerate(data, 1):
DataSet.GetRasterBand(i).WriteArray( image )
DataSet = None但它返回错误:
分段故障(核心转储)
你能帮我修复这个错误吗?或者如何使用gdal导出多波段图像?
谢谢
发布于 2018-08-08 19:07:46
问题似乎是您的循环需要数据的另一种结构。
从rows, cols, no_bands = data.shape行看,你的数据看起来是这样的,其中通道是最后一行,列,通道。
现在,当您循环时,我猜您实际上希望在每个通道上循环,但实际上是在每行上循环。
为了在每个通道上循环,你应该把你的数据重新组织成通道、行、列。这可以通过以下方法来完成
data = np.moveaxis(data, -1, 0)
因此,您可以将您的函数重写为:
def CreateGeoTiff(outRaster, data, geo_transform, projection):
driver = gdal.GetDriverByName('GTiff')
rows, cols, no_bands = data.shape
DataSet = driver.Create(outRaster, cols, rows, no_bands, gdal.GDT_Byte)
DataSet.SetGeoTransform(geo_transform)
DataSet.SetProjection(projection)
data = np.moveaxis(data, -1, 0)
for i, image in enumerate(data, 1):
DataSet.GetRasterBand(i).WriteArray(image)
DataSet = Nonehttps://stackoverflow.com/questions/51719096
复制相似问题