OpenCV Python ŌĆō How to compute and plot the histogram of a region of an image?
Histograms are graphical representations of the distribution of intensity values in an image. They are useful for understanding the characteristics of an image and can be used for a variety of applications such as image segmentation, object detection, and image processing. In this article, we will discuss how to compute and plot the histogram of a region of an image using OpenCV and Python.
Prerequisites
To follow along with this tutorial, you will need:
- OpenCV Python ŌĆō You can install it using the command
pip install opencv-python
- Python 3.x
- NumPy
Importing the necessary libraries
First, we need to import the necessary libraries ŌĆō OpenCV and NumPy.
import cv2
import numpy as np
Loading an image
Let’s load an image to work on. We will load the image using the imread()
function.
image = cv2.imread('image.jpg')
Displaying the image
Before proceeding further, let’s display the image to check if it has loaded correctly.
cv2.imshow('Original Image', image)
cv2.waitKey(0)
The imshow()
function displays the image, and the waitKey()
function waits for a key press from the user. After displaying the image, press any key to continue.
Cropping a region of interest
Next, we need to crop a region of the image to work on. We will use the Rect()
function to define the bounding box of the region of interest.
x = 100
y = 100
w = 200
h = 200
roi = image[y:y+h, x:x+w]
cv2.imshow('Region of Interest', roi)
cv2.waitKey(0)
The Rect()
function defines the bounding box parameters such as the x and y coordinates of the top-left corner, width (w) and height (h) of the region of interest (ROI). We then crop the ROI using indexing on the original image. Finally, we display the cropped region of interest using the imshow()
function.
Computing the histogram
Now that we have our region of interest, we can compute its histogram. We will use the calcHist()
function to compute the histogram.
hist = cv2.calcHist([roi],[0],None,[256],[0,256])
The calcHist()
function takes the following parameters:
images
: It is the source image of type uint8 or float32. The square brackets aroundroi
indicate that it is a list of images. We can pass multiple images if needed.channels
: It is a list of the indices of channels used to compute the histogram. In this case, we have only one channel, so we pass[0]
.mask
: It is an optional mask used to select a region of interest. If we want to compute the histogram of the entire image, we can passNone
.histSize
: It is the number of bins used to represent the histogram. In our case, we are using 256 bins.ranges
: It is the range of intensity values to be considered. In our case, we are considering the full range from 0 to 255.
The calcHist()
function returns the histogram in the form of a NumPy array.
Plotting the histogram
We can now plot the histogram using the matplotlib
library. We will first import it before plotting.
import matplotlib.pyplot as plt
plt.hist(roi.ravel(),256,[0,256])
plt.show()
The hist()
function takes the following parameters:
x
: It is the flattened input data ŌĆō the ROI.bins
: It is the number of bins for the histogram ŌĆō 256 in our case.range
: It is the range of the histogram axis ŌĆō 0 to 255 in our case.
The show()
function displays the plot.
Full code
Here is the full code to compute and plot the histogram of a region of an image.
import cv2
import numpy as np
import matplotlib.pyplot as plt
# Load the image
image = cv2.imread('image.jpg')
# Display the image
cv2.imshow('Original Image', image)
cv2.waitKey(0)
# Define the region of interest
x = 100
y = 100
w = 200
h = 200
roi = image[y:y+h, x:x+w]
# Display the region of interest
cv2.imshow('Region of Interest', roi)
cv2.waitKey(0)
# Compute the histogram
hist = cv2.calcHist([roi],[0],None,[256],[0,256])
# Plot the histogram
plt.hist(roi.ravel(),256,[0,256])
plt.show()
Conclusion
In this tutorial, we have learned how to compute and plot the histogram of a region of an image using OpenCV and Python. We first loaded an image and cropped a region of interest. Then we computed the histogram of the cropped region and plotted it using the matplotlib
library. Histograms are a powerful tool in image processing and analysis, and they can provide valuable insights into the characteristics of an image.