# Plot a histogram for an Image in PIL in Python

Hello Reader, In this tutorial, you will be able to learn how to plot a histogram for an Image in PIL in Python.  For this, we need the Python Imaging Library (PIL) and Matplotlib. At first, let’s have a look at requirements below

```C:/Users/.../Python/Scripts> pip install pillow
C:/Users/.../Python/Scripts> pip install matplotlib```

After installing those packages you will be able to plot a histogram for an Image in PIL. Now, let’s have a look at the required classes from those packages.

```from PIL import Image
import matplotlib.pyplot as plot```

Here, we have imported Image class from PIL Module and pyplot as plot from matplotlib. The plot Method is mainly used to plot the Bargraphs, Histograms, Scatter Plots, etc. We require the box method to plot the Histogram for a given Image in Python.

For further reference, read also ->Matplotlib.pyplot.bar Method Docs

#### Generation of Histogram:

Image Class consists of various builtin methods in which histogram is one of them. The histogram method returns the list of Values to plot Histogram. It consists of exactly 768 values for the three colors in the RGB Model of the given Image. i.e. 256 Values for each Colour.

It can be explained as follows

• 0 to 255 values indicate Red Colour Indices
• 256 to 511 values indicate Green Colour Indices
• 512 to 767 values indicate Blue Colour Indices

Because in the RGB Colour Model, every color must have 256 Colour Indices to obtain different Shades of the Colour.

Enough Intro. Let’s dig into the code

```from PIL import Image
import matplotlib.pyplot as plot
def RED(R): return '#%02x%02x%02x'%(R,0,0)
def GREEN(G): return '#%02x%02x%02x'%(0,G,0)
def BLUE(B):return '#%02x%02x%02x'%(0,0,B)
i=Image.open("Path_to_your_Image")
hst=i.histogram()
Red=histogram[0:256]      # indicates Red
Green=histogram[256:512]  # indicated Green
Blue=histogram[512:768]   # indicates Blue
plt.figure(0)             # plots a figure to display RED Histogram
for i in range(0, 256):
plt.bar(i, l1[i], color = getRed(i),alpha=0.3)
plt.figure(1)             # plots a figure to display GREEN Histogram
for i in range(0, 256):
plt.bar(i, l2[i], color = getGreen(i),alpha=0.3)
plt.figure(2)             # plots a figure to display BLUE Histogram
for i in range(0, 256):
plt.bar(i, l3[i], color = getBlue(i),alpha=0.3)
plt.show()
```

That’s a bit clumsy, right? If you have gone through it was very easy to understand. Let’s have in detail explanation below

#### Explanation:

1. The three functions RED, GREEN and BLUE simply returns the Hexa-Decimal Colour String of their corresponding colors.
2. The is the Image Object for the Image which is located at the specified path (i.e. at “Path_to_your_Image”) on your computer.
3. As said above, hst is the List that holds the values of Histogram for the three colors.
4. Then we have divided those values according to those colors as Red, Green, and Blue.
5. And then we have created the three different figures to plot Histograms for the Three Colours.

Lastly, we have displayed the Histograms plotted in the figures according to the Colours.

Input: Output:

Red Histogram Green Histogram Blue Histogram ### 2 responses to “Plot a histogram for an Image in PIL in Python”

1. I fixed your code says:

def getRed(R): return ‘#%02x%02x%02x’%(R,0,0)
def getGreen(G): return ‘#%02x%02x%02x’%(0,G,0)
def getBlue(B):return ‘#%02x%02x%02x’%(0,0,B)
i=Image.open(fname)

hst=i.histogram()
Red=hst[0:256] # indicates Red
Green=hst[256:512] # indicated Green
Blue=hst[512:768] # indicates Blue
plt.figure(0) # plots a figure to display RED Histogram

for i in range(0, 256):
plt.bar(i, Red[i], color = getRed(i),alpha=0.3)
plt.figure(1) # plots a figure to display GREEN Histogram
for i in range(0, 256):
plt.bar(i, Green[i], color = getGreen(i),alpha=0.3)
plt.figure(2) # plots a figure to display BLUE Histogram
for i in range(0, 256):
plt.bar(i, Blue[i], color = getBlue(i),alpha=0.3)
plt.show()

• Mohan Sai Varun Kasarla says:

Thank You Very Much for your concern

With Regards:
K M S Varun
[email protected]