gpt4 book ai didi

python 3 : How to change image data in GDAL?

转载 作者:行者123 更新时间:2023-11-28 19:01:23 25 4
gpt4 key购买 nike

我有一个 GeoTIFF 图像,其中包含一个颜色表和一个带有 8 位表键的光栅带,并且使用 LZW 压缩,我用 gdal.Open 加载它.我还有一个包含 24 位 RGB 值(用于图像的模糊版本)的 numpy 数组,对应于三个 8 位光栅波段。我需要将这三个光栅波段替换为当前图像中的光栅波段,然后保存图像(如果可能,最好保存为新文件)。我该怎么做?

我想以 RGB 形式将数据保存在 numpy 数组中,因此我希望最终得到三个光栅波段而不是一个。我看到有一个 AddBand方法,但是如何删除现有的波段(或修改它,因为波段恰好具有相同的位深度)?另外,如果我让图像包含三个波段而不是一个波段,我是否需要做更多的事情来指定这三个波段代表 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

关于 python 3 : How to change image data in GDAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52261722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com