我有一个3band的geotiff图像。

band1,2是实际图像值,band3是实例角度值。

band1,2是float32数据类型

根据代码是我尝试过的。

但这不起作用。

我认为频段数据的范围太大,所以不会

from osgeo import gdal, osr, ogr
from PIL import Image
import numpy as np


ds = gdal.Open('image path', gdal.GA_ReadOnly)
rb = ds.GetRasterBand(1)
test = rb.ReadAsArray()
rb2 = ds.GetRasterBand(2)
test2 = rb2.ReadAsArray()
rb3 = ds.GetRasterBand(3)
test3 = rb3.ReadAsArray()
slice56 = test2
formatted = (slice56 * 255 / np.max(slice56)).astype('uint8')
img = Image.fromarray(formatted)
img.save('save image path')


我怎么解决这个问题??

最佳答案

您可以为此使用gdal.Translate

您可以阅读文档here

from osgeo import gdal

options_list = [
    '-ot Byte',
    '-of JPEG',
    '-b 1,
    '-scale'
]
options_string = " ".join(options_list)

gdal.Translate('save_image_path.jpg',
               'image_path.tif',
               options=options_string)


上面的代码仅创建了一个带1缩放到字节范围的jpg文件。您可以通过添加,'-b 2'等添加更多的频段。另外请注意,小数位会自动将整个范围包装为字节范围。如果您喜欢别的东西,可以使用'-scale min_val max_val'来指定自己喜欢的范围,因为通常不需要最低值或最高值。

08-04 04:27