Turning A Large Matrix Into A Grayscale Image
Solution 1:
Your array of "binary values" is an array of bytes?
If so, you can do (using Pillow) after resizing it:
from PIL importImageim= 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
Solution 2:
Using PIL is not really needed, you can plot the array directly with pyplot (see below). To save to a file, you could use plt.imsave('fname.png', im)
.
Code below.
import numpy as np
import matplotlib.pyplot as plt
x = (np.random.rand(1754**2) < 0.5).astype(int)
im = x.reshape(1754, 1754)
plt.gray()
plt.imshow(im)
You can also use plt.show(im)
to display image in new window.
Solution 3:
You can do so with scipy.misc.toimage
and im.save("foobar.png")
:
#!/usr/bin/env python# your data is "array" - I just made this for testing
width, height = 512, 100
import numpy as np
array = (np.random.rand(width*height) < 0.5).astype(int)
array = array.reshape(height, width)
# what you needfrom scipy.misc import toimage
im = toimage(array)
im.save("foobar.png")
which gives
Solution 4:
If you have as example a txt file in your PC with some data (an image), in order to visualize such data as gray scale image you can use this:
with open("example.txt", "r") as f:
data = [i.strip("\n").split() for i in f.readlines()]
data1 = np.array(data, dtype=float)
plt.figure(1)
plt.gray()
plt.imshow(data1)
plt.show()
Post a Comment for "Turning A Large Matrix Into A Grayscale Image"