I have an array of binary numbers in Python:
data = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1...]
I would like to take this data out and save it as a bitmap, with a '0' corresponding to white and a '1' corresponding to black. I know that there are 2500 numbers in the array, corresponding to a 50x50 bitmap. I've downloaded and installed PIL, but I'm not sure how to use it for this purpose. How can I convert this array into the corresponding image?
You can use Image.new
with 1
mode and put each integer as pixel in your initial image:
>>> from PIL import Image
>>> import random
>>> data = [random.choice((0, 1)) for _ in range(2500)]
>>> data[:] = [data[i:i + 50] for i in range(0, 2500, 50)]
>>> print data
[[0, 1, 0, 0, 1, ...], [0, 1, 1, 0, 1, ...], [1, 1, 0, 1, ...], ...]
>>> img = Image.new('1', (50, 50))
>>> pixels = img.load()
>>> for i in range(img.size[0]):
... for j in range(img.size[1]):
... pixels[i, j] = data[i][j]
>>> img.show()
>>> img.save('/tmp/image.bmp')
The numpy
and matplotlib
way of doing it would be:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
plt.imsave('filename.png', np.array(data).reshape(50,50), cmap=cm.gray)
See this
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