tl; др
Содержит ли x
значение uint
в [0, 255]?Если нет и особенно если x
находится в диапазоне от 0 до 1, это является причиной ошибки.
Объяснение
Большинство библиотек изображений (например, matplotlib, opencv, scikit-image)) два способа представления изображений:
- как
uint
со значениями в диапазоне от 0 до 255. - как
float
со значениями в диапазоне от 0 до 1.
Последний более удобен при выполнении операций между изображениями и, следовательно, более популярен в области компьютерного зрения.Однако PIL, похоже, не поддерживает его для изображений RGB .
Если вы посмотрите здесь , то кажется, что при попытке прочитать изображение из массива, еслимассив имеет форму (height, width, 3)
, он автоматически предполагает, что это RGB-изображение, и ожидает, что он будет иметь dtype
из uint8
!Однако в вашем случае у вас есть изображение RBG со значениями float
от 0 до 1.
Решение
Это можно исправить, преобразовав изображение в формат, ожидаемыйPIL:
im = Image.fromarray((x * 255).astype(np.uint8))