![](/img/trans.png)
[英]Reading binary file into different hex “types” (8bit, 16bit, 32bit, …)
[英]Converting a 16bit GeoTiff file as an 8bit JPEG file using python
我正在尝试将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位图像。 当我尝试这段代码时,我在读取数据时遇到了错误。 因此,我无法使用此解决方案。
您可以使用这样的选项
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'
我认为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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.