I use the MNIST dataset that contains 28x28 grayscale images represented as numpy arrays with 0-255 values. I'd like to convert images to black and white only (0 and 1) so that pixels with a value over 128 will get the value 1 and pixels with a value under 128 will get the value 0.
Is there a simple method to do so?
Yes. Use (arr > 128)
to get a boolean mask array of the same shape as your image, then .astype(int)
to cast the bools to ints:
>>> import numpy as np
>>> arr = np.random.randint(0, 255, (5, 5))
>>> arr
array([[153, 167, 141, 79, 58],
[184, 107, 152, 215, 69],
[221, 90, 172, 147, 125],
[ 93, 35, 125, 186, 187],
[ 19, 72, 28, 94, 132]])
>>> (arr > 128).astype(int)
array([[1, 1, 1, 0, 0],
[1, 0, 1, 1, 0],
[1, 0, 1, 1, 0],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 1]])