PIL / Pillow не поддерживает 48-битные подобные изображения. Один из вариантов может быть OpenCV , но имейте в виду, что это BGR, а не RGB:
import cv2
# Read with whatever bit depth is specified in the image file
BGR = cv2.imread('image.png', cv2.IMREAD_ANYDEPTH|cv2.IMREAD_ANYCOLOR)
# Check dtype and number of channels
print(BGR.dtype, BGR.shape)
dtype('uint16'), (768, 1024, 3)
Другой вариант может быть pyvips
, который работает немного по-другому, но имеет некоторые хорошие преимущества:
import pyvips
im = pyvips.Image.new_from_file('image.png', access="sequential")
print(im)
<pyvips.Image 1024x768 ushort, 3 bands, rgb16>
Если вы действительно, действительно застряли и не можете / не можете установить OpenCV или pyvips , у вас есть * еще пара опций с ImageMagick ...
Вы можете уменьшить ваши 3 канала RGB (16 бит каждый) до 3 каналов RGB (8 бит каждый) с помощью:
magick input.png PNG24:output.png # then open "output.png" with PIL
Или вы можете разделить 3 канала RGB на 3 отдельных 16-разрядных файла и обработать их отдельно с помощью PIL / Pillow :
magick input.png -separate channel-%d.png
, и вы получите красный канал в виде 16-битного изображения в channel-0.png
, который можно открыть с помощью PIL / Pillow , зеленый как channel-1.png
и синий как channel-2.png