[SOLVED] How to make grayscale image using numpy and matplotlib

Issue

I want to make a grayscale image but getting errors like this, I have already searched on google but don’t get the answer and I don’t know what keywords I should use to search it on google.

My Code:

!pip install matplotlib
import numpy as np
import matplotlib.pyplot as plt

img = plt.imread('/content/drive/MyDrive/Colab Notebooks/gambar.jpg')
img = np.zeros([120, 300, 3], dtype=np.uint8)

h, w = img[:2]

for x in range(w):
  for y in range(h):
    gray = (20 + 125 + 255) / 3
    img[y,x] = gray

plt.imshow(img)
plt.show()

Errors Output:

TypeError                                 Traceback (most recent call last)
<ipython-input-43-e6c1f87f1234> in <module>()
      8 h, w = img[:2]
      9 
---> 10 for x in range(w):
     11   for y in range(h):
     12     gray = (20 + 125 + 255) / 3

TypeError: only integer scalar arrays can be converted to a scalar index

Solution

Check out the answer here. The accepted answer shows doing this with both Pillow and numpy/matplotlib.

If the end goal is just to save the image out as a grayscale version then Pillow will do the job. If the goal is to send the grayscale version to some other part of the script where numpy/matplotlib is required you can either use the second part of the answer at the above link or convert the Pillow object to a numpy array as shown here.

Answered By – Huston94

Answer Checked By – Katrina (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *