I am processing an image with imageio library in Python, and I got unexpected result.
I tested the problem with the code below:
import imageio
import numpy as np
imgarray = np.zeros((3, 4032, 3024), dtype=np.uint8)
imgarray[0, 0::2, 1::2] = 255
print('Original\n', imgarray)
imageio.imsave('test.jpg', imgarray.transpose(1, 2, 0))
img = imageio.imread('test.jpg')
imgarray = np.array(img).transpose(2, 0, 1)
print('\n\nSave and load\n', imgarray)
Printed results are:
Original
[[[ 0 255 0 ... 255 0 255]
[ 0 0 0 ... 0 0 0]
[ 0 255 0 ... 255 0 255]
...
[ 0 0 0 ... 0 0 0]
[ 0 255 0 ... 255 0 255]
[ 0 0 0 ... 0 0 0]]
[[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
...
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]]
[[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
...
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]]]
Save and load
[[[ 50 112 48 ... 120 56 118]
[ 45 46 45 ... 45 45 46]
[ 45 116 55 ... 112 52 129]
...
[ 53 45 45 ... 50 45 45]
[ 48 114 49 ... 117 53 119]
[ 45 47 46 ... 45 45 46]]
[[ 0 48 0 ... 56 0 54]
[ 0 0 0 ... 0 0 0]
[ 0 52 0 ... 48 0 65]
...
[ 0 0 0 ... 0 0 0]
[ 0 50 0 ... 53 0 55]
[ 0 0 0 ... 0 0 0]]
[[ 0 48 0 ... 56 0 54]
[ 0 0 0 ... 0 0 0]
[ 0 52 0 ... 48 0 65]
...
[ 0 0 0 ... 0 0 0]
[ 0 50 0 ... 53 0 55]
[ 0 0 0 ... 0 0 0]]]
Why are the original numpy array and the numpy array after saving and loading different?
I think they should be identical after saving and loading.
I have same problem when using different libraries, e.g. cv2 or PIL.Image.
Is there a way to maintain the data unchanged after saving and loading?