我有一个 GeoTIFF 图像,其中包含颜色表和带有 8 位表键的单个栅格带,并且使用 LZW 压缩,我加载该图像gdal.Open https://gdal.org/python/osgeo.gdal-module.html。我还有一个包含 24 位 RGB 值(用于图像的模糊版本)的 numpy 数组,对应于三个 8 位光栅波段。我需要用这三个栅格波段替换图像中当前的栅格波段,然后保存图像(如果可能,最好保存为新文件)。我怎么做?
我想将数据以 RGB 形式保存在 numpy 数组中,所以我想最终得到三个栅格波段而不是一个。我看到有一个AddBand https://gdal.org/python/osgeo.gdal.Dataset-class.html方法,但如何删除现有频段(或修改它,因为这些频段恰好具有相同的位深度)?另外,如果我使图像包含三个波段而不是仅一个,我是否需要执行更多操作来指定这三个波段代表 R、G 和 B?
我会这样做,只是使用新值创建模板栅格的新副本...如果您想不惜一切代价避免拥有副本,您也可以覆盖。但创建副本不太容易出错,而且您可以保留原始副本。
这个函数假设你有一个数组arr
,它在三维(即第二轴)中有三个带。
import gdal
def createRGB(template,arr,filename):
'''Creates a copy of a 3-band raster with values from array
Arguments:
template: Path to template raster
arr: Value array with dimensions (r,c,3)
filename: Output filename for new raster
'''
# Open template
t = gdal.Open(template)
# Get geotiff driver
driver = gdal.GetDriverByName('GTiff')
# Create new raster
r = driver.Create(filename, t.RasterXSize, t.RasterYSize, 3, gdal.GDT_Byte,['COMPRESS=LZW'])
# Set metadata
r.SetGeoTransform(t.GetGeoTransform())
r.SetProjection(t.GetProjection())
# loop through bands and write new values
for bix in range(3):
rb = self.raster.GetRasterBand(bix+1)
# Write array
rb.WriteArray(arr[...,bix])
# Close datasets
t = None
r = None
rb = None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)