簡體   English   中英

使用python將16位GeoTiff文件轉換為8位JPEG文件

[英]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接口。

https://gis.stackexchange.com/questions/26249/how-to-convert-qgis-generation-tiff-images-into-jpg-jpeg-using-gdal-command-line/26252

https://gis.stackexchange.com/questions/206537/geotiff-to-16-bit-tiff-png-or-bmp-image-for-heightmap/206786

我想出的python代碼是:

from osgeo import gdal
gdal.Translate(destName='test.jpg', srcDS='test.tif')

這將起作用,但是我不認為輸出被掩蓋為8位或值被重新縮放。 有誰知道如何應用這些特定設置?

請注意,下面的帖子非常相似,但是使用了PIL包。 但是,問題在於,顯然PIL無法攝取16位圖像。 當我嘗試這段代碼時,我在讀取數據時遇到了錯誤。 因此,我無法使用此解決方案。

在Python中將tiff轉換為jpeg

您可以使用這樣的選項

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_valmax_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM