我正在尝试将16位3波段RGB GeoTIFF文件转换为8位3波段JPEG文件。似乎gdal
库应该可以很好地工作。 我的问题是如何在python gdal API中指定转换为8位输出,以及如何在该转换中缩放值?另外,如何检查输出是8位还是16位?
gdal.Translate()
函数应该用于此目的。但是,我发现的唯一一个将值重新调整为8位的例子涉及C接口。下面的两个帖子提供了这方面的示例,但同样它们不适合我的目的,因为他们没有使用Python界面。
我想出的python代码是:
from osgeo import gdal
gdal.Translate(destName='test.jpg', srcDS='test.tif')
这样可行,但我不认为输出被转换为8位或者值被重新调整。有谁知道如何应用这些特定设置?
请注意,以下帖子非常相似,但使用PIL
包。然而问题是显然PIL
无法摄取16位图像。当我尝试这段代码时,我遇到了有关读取数据的错误。因此,我无法使用此解决方案。
答案 0 :(得分:2)
您可以像这样使用选项
from osgeo import gdal
scale = '-scale min_val max_val'
options_list = [
'-ot Byte',
'-of JPEG',
scale
]
options_string = " ".join(options_list)
gdal.Translate('test.jpg',
'test.tif',
options=options_string)
选择适合您图片的最小值和最大值min_val
和max_val
如果您想扩展到整个范围,只需跳过最小值和最大值,然后使用scale = '-scale'
答案 1 :(得分:0)
我认为gdal的方式是使用gdal.TranslateOptions()
。
from osgeo import gdal
translate_options = gdal.TranslateOptions(format='JPEG',
outputType=gdal.GDT_Byte,
scaleParams=[''],
# scaleParams=[min_val, max_val],
)
gdal.Translate(destName='test.jpg', srcDS='test.tif', options=translate_options)