Вы можете сохранить несколько изображений, каждое из которых представляет одну полосу (в оттенках серого), или даже несколько полос (цвет) в одном файле TIFF с помощью PIL / Pillow следующим образом:
from PIL import Image
# Synthesize 8 dummy images, all greyscale, all same size but with varying brightness
size=(480,640)
b1 = Image.new('L', size, color=10)
b2 = Image.new('L', size, color=20)
b3 = Image.new('L', size, color=30)
b4 = Image.new('L', size, color=40)
b5 = Image.new('L', size, color=50)
b6 = Image.new('L', size, color=60)
b7 = Image.new('L', size, color=70)
b8 = Image.new('L', size, color=80)
# Save all 8 to single TIFF file
b1.save('multi.tif', save_all=True, append_images=[b2,b3,b4,b5,b6,b7,b8])
Если вы сейчас исследуетеэтот файл с ImageMagick в командной строке, вы можете увидеть все 8 диапазонов:
magick identify multi.tif
multi.tif[0] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[1] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[2] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[3] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[4] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[5] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[6] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
multi.tif[7] TIFF 480x640 480x640+0+0 8-bit Grayscale Gray 2.34473MiB 0.000u 0:00.000
Если вы используете для обработки массивы OpenCV или Numpy, выможно преобразовать массив OpenCV или Numpy в изображение PIL / Pillow с помощью:
PILimage = Image.fromarray(numpyImage)
и, наоборот, из изображения PIL / Pillow в массив Numpy:
NumpyImage = np.array(PILimage)
Если вы хотите прочитать их обратно, вы можете сделать это:
# Open the multi image
im = Image.open('multi.tif')
# Iterate through frames
for frame in ImageSequence.Iterator(im):
frame.show()

Если вы хотите перейти кВы можете искать конкретную группу следующим образом:
im = Image.open('multi.tif')
im.seek(3)
im.show()
Вы также можете извлечь band3 из TIF и сохранить его в формате PNG с помощью ImageMagick в командной строке с помощью:
magick multi.tif[3] band3.png
Или создайте RGB-композицию с полосами 1, 2, 7:
magick multi.tif[1] multi.tif[2] multi.tif[7] -colorspace RGB -combine 127rgb.png
, которая будет выглядеть темно-синей, потому чтоКрасный и зеленый каналы очень низкие, и только синий канал имеет большое значение.
Я не лучший в мире Python, поэтому не уверен ни в каких последствиях / ошибках, но яПодумайте, если у вас есть массив изображений 600x600x40, вы можете делать то, что я предлагаю, вот так:
# Synthesize dummy array of 40 images, each 600x600
nparr = np.random.randint(0,256,(600,600,40), dtype=np.uint8)
# Make PIL/Pillow image of first
a = Image.fromarray(nparr[:,:,0])
# Save whole lot in one TIF
a.save('multi.tif', save_all=True, append_images=[Image.fromarray(nparr[:,:,x]) for x in range(1,40)])
Ключевые слова : многоканальный, многоканальный, многоканальныйспектральные, мультиспектральные, спутниковые изображения, изображения, обработка изображений, Python, Numpy, PIL, Pillow, TIFF, TIF, NDVI