java - 如何在 python 或 java 中将 geotiff 转换为 jpg?

标签 java python image gdal geotiff

我有一个 geotiff 图像,有 3 个波段。

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
)

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

关于java - 如何在 python 或 java 中将 geotiff 转换为 jpg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50207292/

相关文章:

java - 配置JmsListener执行顺序

java - 如何将数组传递给构造函数?

python - Google Cloud App Engine 灵活的 Python 2.7 环境错误启动新线程

html - 悬停背景,前面有图像

jquery - 更改图标图像的CSS代码

java - 如何使用Java中的Vietea公式计算三次函数?

java - java.util.prefs.Preferences 在 Java 中如何工作?

python - LXML - 解析 tr 标签内的 td 内容

python - 如何以方便的数学方式输入公式来绘制矢量场?

c# - 一张图片到另一张图片的高级褪色