使用 `gdal` 将大彩色图像保存为 `GTiff`
Saving a large color image as `GTiff` with `gdal`
我正在尝试保存尺寸为 (15000, 80000, 3)
的大图像。这个数组是我初始化为 im_final = np.zeros((15000,80000,,3))
的 numpy 数组。为了节省开支,我使用 gdal
像这样:
dst_ds = gdal.GetDriverByName('GTiff').Create('val.tif', 80000, 15000, 3, gdal.GDT_Byte)
dst_ds.GetRasterBand(1).WriteArray(im_final[:,:,0]) # write r-band to the raster
dst_ds.GetRasterBand(2).WriteArray(im_final[:,:,1]) # write g-band to the raster
dst_ds.GetRasterBand(3).WriteArray(im_final[:,:,2]) # write b-band to the raster
dst_ds.FlushCache() # write to disk
dst_ds = None
当我保存它时,生成的图像是黑白的。但是,我需要图像为 RGB,有人知道问题出在哪里吗?此外,im_final
中的值为 uint16
.
问题是您正在尝试将 uint16
写入 uint8
(gdal.GDT_Byte
) 图像。如果您确实需要 8 位图像(例如,如果您想在非 GIS 程序中查看此图像),最佳做法是将 im_final
缩放到 0-255 之间。这可以是从 0-65535 到 0-255 的映射,或者每个波段的 min/max 到 0-255 或任何其他数量的方式。
如果 im_final
中的值很重要,则使用 driver.Create()
中的 gdal.GDT_UInt16
。
我正在尝试保存尺寸为 (15000, 80000, 3)
的大图像。这个数组是我初始化为 im_final = np.zeros((15000,80000,,3))
的 numpy 数组。为了节省开支,我使用 gdal
像这样:
dst_ds = gdal.GetDriverByName('GTiff').Create('val.tif', 80000, 15000, 3, gdal.GDT_Byte)
dst_ds.GetRasterBand(1).WriteArray(im_final[:,:,0]) # write r-band to the raster
dst_ds.GetRasterBand(2).WriteArray(im_final[:,:,1]) # write g-band to the raster
dst_ds.GetRasterBand(3).WriteArray(im_final[:,:,2]) # write b-band to the raster
dst_ds.FlushCache() # write to disk
dst_ds = None
当我保存它时,生成的图像是黑白的。但是,我需要图像为 RGB,有人知道问题出在哪里吗?此外,im_final
中的值为 uint16
.
问题是您正在尝试将 uint16
写入 uint8
(gdal.GDT_Byte
) 图像。如果您确实需要 8 位图像(例如,如果您想在非 GIS 程序中查看此图像),最佳做法是将 im_final
缩放到 0-255 之间。这可以是从 0-65535 到 0-255 的映射,或者每个波段的 min/max 到 0-255 或任何其他数量的方式。
如果 im_final
中的值很重要,则使用 driver.Create()
中的 gdal.GDT_UInt16
。