I have a NumPy array of 3,076,568 binary values (1s and 0s). I would like to convert this to a matrix, and then to a grayscale image in Python.
However, when I try to reshape the array into a 1,538,284 x 1,538,284 matrix, I get a memory error.
How can I reduce the size of the matrix so that it will turn into an image that will fit on a screen without losing the uniqueness/data?
Furthermore, how would I turn it into a grayscale image?
Any help or advice would be appreciated. Thank you.
Your array of "binary values" is an array of bytes?
If so, you can do (using Pillow) after resizing it:
from PIL import Image
im = Image.fromarray(arr)
And then im.show()
to see it.
If your array has only 0's and 1's (1-bit depth or b/w) you may have to multiply it to 255
im = Image.fromarray(arr * 255)
Here an example:
>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()
Edit (2018):
This question was written in 2011 and Pillow changed ever since requiring to use the mode='L'
parameter when loading with fromarray
.
Also on comments below it was said arr.astype(np.uint8)
was needed as well, but I have not tested it