Python 3:如何在GDAL中更改图像数据? [英] Python 3: How to change image data in GDAL?

查看:362
本文介绍了Python 3:如何在GDAL中更改图像数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个GeoTIFF图像,其中包含一个颜色表和一个带有8位表键的光栅带,并使用LZW压缩,并通过

I have a GeoTIFF image that contains a color table and a single raster band with 8-bit table keys, and that uses LZW compression, that I load with gdal.Open. I also have a numpy array containing 24-bit RGB-values (for a blurred version of the image), corresponding to three 8-bit raster bands. I need to substitute these three raster bands for the raster band that is currently in the image, and then save the image (preferably as a new file if possible). How do I do that?

我想将数据以RGB形式保存在numpy数组中,所以我想以三个光栅带代替一个.我看到有一个 AddBand 方法,但是如何删除现有频段(或修改频段,因为这些频段恰好具有相同的位深度)?另外,如果我使图像包含三个带而不是一个带,我是否需要做更多的工作来指定三个带代表R,G和B?

I would like to keep the data in the numpy array in RGB form, so I would like to end up with three raster band instead of one. I see that there is an AddBand method, but how do I remove an existing band (or modify it, since the bands happen to have the same bit-depth)? Also, if I make the image contain three bands instead of just one, do I need to do something more to specify that the three bands represent R, G and B?

推荐答案

我要这样做的方法是,仅使用新值创建模板栅格的新副本...如果您想避免所有副本费用,您也可以覆盖.但是创建副本不太容易出错,并且您可以保留原始副本.

The way I would do it, to just create a fresh copy of your template raster with the new values ... If you want to avoid having copies at all costs, you could also overwrite. But creating a copy is less error prone, and you can retain the original.

此函数假定您有一个数组arr,该数组在第三维(即第2轴)上具有三个带.

This function assumes that you have an array arr, which has three bands in the third dimension (so 2nd axis).

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:如何在GDAL中更改图像数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆