Как конвертировать Geotiff в JPG в Python или Java? - PullRequest
0 голосов
/ 07 мая 2018

у меня есть геотифовые изображения, которые имеют 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')

как я могу решить эту проблему ??

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Вышесказанное работало хорошо для меня, за исключением того, что разрешение JPEG не было большим. Обмен JPEG в PNG работал лучше.

0 голосов
/ 08 мая 2018

Вы можете использовать gdal.Translate для этого.

Вы можете прочитать документацию здесь

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 с диапазоном 1, масштабированным до байтового диапазона. Вы можете добавить больше полос, добавив '-b 2' и т. Д. Также обратите внимание, что масштаб автоматически оборачивает весь диапазон в диапазон байтов. Если вам нравится что-то еще, вы можете использовать '-scale min_val max_val', чтобы указать нужный вам диапазон, поскольку часто вам не нужны ни самые низкие, ни самые высокие доступные значения.

...