Convert a Numpy Array to Image in Python
In this tutorial, you will learn how to Convert a Numpy Array to Image in Python. Here, we are going to use the Python Imaging Library ( PIL ) Module and Numerical Python (Numpy) Module to convert a Numpy Array to Image in Python. PIL and Numpy consist of various Classes. We require only Image Class. Hence, our first script will be as follows:
from PIL import Image import numpy as np
Here, we have imported Image Class from PIL Module and Numpy Module as np. Now, let’s have a look at the creation of an array.
w,h=512,512 # Declared the Width and Height of an Image t=(h,w,3) # To store pixels # Creation of Array A=np.zeros(t,dtype=np.uint8) # Creates all Zeros Datatype Unsigned Integer
Let’s have a clearer Explanation here,
Tuple t indicates the matrix order “h x w x 3” where w,h is the height and width of an Image, 3 indicates the three colors per pixel [R, G, B].
Also, read: Find the most frequent element in NumPy array in Python
Structure of Array:
So, lets have a look at the structure of the specified array for converting it to Image. It is as follows
A= [ [R00, G00, B00], [R01, G01, B01], [R02, G02, B02], …, [R0(h-1), G0(h-1), B0(h-1)]
[R10, G10, B10], [R11, G11, B11], [R12, G12, B12], …, [R1(h-1), G1(h-1), B1(h-1)]
” ” ” ”
” ” ” ”
[R(w-1)0, G(w-1)0, B(w-1)0], [R(w-1)1, G(w-1)1, B(w-1)1], …, [R(w-1)(h-1), G(w-1)(h-1), B(w-1)(h-1)] ]
I think it might be complex to understand. But, it consists of [R,G,B] of each pixel of an Image. Now, lets have a look at assigning colors to the Image.
for i in range(h): for j in range(w): A[i,j]=[i%256,j%256,(i+j)%256] # Assigning Colors to Each Pixel
So, Our new Pixel will be [i,j,i+j] where, i iterates through the Height and j iterates through the Width of an Image. i.e. Red -> i%256, Green -> j%256 and Blue -> (i+j)%256.
Each Color of Pixel is Modular Divided(%) by 256 since the RGB Color Model holds the highest Color Range from 0 t0 255 Hexadecimal Values. Now, let’s have a look at converting Array into Image using Image Class.
i=Image.fromarray(A,"RGB")
As you have seen, Image Class Consists fromarray() Method which converts the given array to the specified Color Model(i.e. RGB Model).
Here, i is the Image Object created for the given Numpy Array. Let’s have a glance over Viewing or Showing the Image. It can be done by the show() method of Image Object. Consider the following Example
Example:
from PIL import Image import numpy as np w,h=512,512 t=(h,w,3) A=np.zeros(t,dtype=np.uint8) for i in range(h): for j in range(w): A[i,j]=[i%256,j%256,(i+j)%256] i=Image.fromarray(A,"RGB") i.show()
Output:
The output of the above code will be as follows
So, In this way, we can convert a Numpy Array into Image using PIL and Numpy.
When run in Jupyter Notebook this code, as written above, generates the following error:
TypeError Traceback (most recent call last)
in
4 t=(h,w,3)
5 A=np.zeros(t,dtype=np.uint8)
—-> 6 for i in range(h):
7 for j in range(w):
8 A[i,j]=[i%256,j%256,(i+j)%256]
TypeError: ‘numpy.ndarray’ object is not callable