I have 3 arrays which are 400x600, which represent the 3 colors of the image i want to make.
I found a potential way here: http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.misc.imsave.html but they want me to convert the floats to uint8's. Now if I change the dtype by 'image.dtype = np.uint8' then somehow changes the dimention to 400x600x24 (while when I don't change the type it is 400x600x3)
How do I change this? (Other methods also welcome)
image.dtype = np.uint8
just forcibly casts the bytes from float64
to uint8
. Since each float64
takes 8 bytes, and each uint8
is only 1 byte, you're getting 8 times as many values.
To convert the values, instead of reinterpreting the bytes, you want the astype
method:
image = image.astype(np.uint8)
However, that probably isn't going to be very useful, for two reasons. First, the big one, your float values are probably all in the range 0.0-1.0. Second, astype
truncates, rather than rounding. So, converting to integers is just going to make almost all of them 0, and the rest 1, rather than smoothly ranging from 0-255.
So, what you probably want is something like:
image = (image * 255).round().astype(np.uint8)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With