繁体   English   中英

Python 3:如何在GDAL中更改图像数据?

[英]Python 3: How to change image data in GDAL?

我有一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM