tl;dr
Does x
contain uint
values in [0, 255]? If not and especially if x
ranges from 0 to 1, that is the reason for the error.
Explanation
Most image libraries (e.g. matplotlib, opencv, scikit-image) have two ways of representing images:
- as
uint
with values ranging from 0 to 255.
- as
float
with values ranging from 0 to 1.
The latter is more convenient when performing operations between images and thus is more popular in the field of Computer Vision.
However PIL seems to not support it for RGB images.
If you take a look here
it seems that when you try to read an image from an array, if the array has a shape of (height, width, 3)
it automatically assumes it's an RGB image and expects it to have a dtype
of uint8
!
In your case, however, you have an RBG image with float
values from 0 to 1.
Solution
You can fix it by converting your image to the format expected by PIL:
im = Image.fromarray((x * 255).astype(np.uint8))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…