2017-03-04 81 views
2

我试图保存尺寸为(15000, 80000, 3)的大图。这个数组是一个numpy数组,我初始化为im_final = np.zeros((15000,80000,,3))。要做到节约,我用gdal像这样:用`gdal`将大彩色图像保存为`GTiff`

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

回答

2

问题是您正在尝试将uint16写入uint8gdal.GDT_Byte)图像。如果您确实需要8位图像(例如,如果要在非GIS程序中查看此图像),最佳做法是将im_final缩放到0-255之间。这可以是从0-65535到0-255或每个频段的最小/最大值到0-255或任何其他数目的方式的映射。

如果im_final中的值很重要,那么在driver.Create()中使用gdal.GDT_UInt16

+0

嗯,我只能查看GIS程序中的uint16输出吗?我试着查看我的Mac上的输出,我得到这个错误:'它可能已损坏或使用预览不识别的文件格式。 –

+0

有许多程序可以处理16位图像(Adobe Photoshop,其他图像处理软件,GIS)。例如,如果您想将图像发布到网络上,那么8位RGB(jpeg或png)可能是您最好的选择。 –