How to Plot Histograms of Different Colors of an Image in OpenCV Python?
When working with images, it is often required to analyze the color distribution of the image. Histograms provide a visual representation of the distribution of colors in an image. OpenCV is a popular library used for image processing in Python. In this article, we will learn how to plot histograms for different colors of an image using OpenCV-python.
Requirements
- Python 3.x
- OpenCV-python module
You can install the OpenCV-python module using pip. To install, open the terminal/command prompt and type the following command:
pip install opencv-python
Reading the Image
First, let’s read the image on which we want to plot the histograms. We will use the imread()
function from the OpenCV module to read the image. The syntax for imread()
function is as follows:
cv2.imread(file_path, flag)
file_path
: Path of the image which we want to read.
flag
: A flag indicating the color type of a loaded image.
We will use the cv2.IMREAD_COLOR
flag to read the image as a color image. Here is the sample code to read the image:
import cv2
# read the image
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
Plotting Histograms
OpenCV provides the calcHist()
function to calculate the histogram of an image. The syntax for calcHist()
function is as follows:
hist = cv2.calcHist(images, channels, mask, histSize, ranges)
images
: Source image(s) of type uint8 or float32. For a multi-channel image, pass a list of images.
channels
: The index of the channel for which histograms are calculated. For grayscale image, its value is [0]. For color images, we can pass [0], [1], [2] to calculate the histogram for blue, green, and red channels, respectively.
mask
: The mask used to determine which pixels of the image to use; None by default.
histSize
: The number of bins in the histogram. For the grayscale image, the number of bins is 256. For color images, we can set any value according to our need.
ranges
: The level ranges for each dimension in the source image. For grayscale image, it is [0,256]. For color images, it is [0,256, 0,256, 0,256] for blue, green and red channels respectively.
The calcHist()
function returns a histogram for the specified channel. We can plot this histogram using the matplotlib
library. Here is a sample code to plot the histogram of the blue channel:
import cv2
import matplotlib.pyplot as plt
# read the image
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
# calculate the histogram of blue channel
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
# plot the histogram
plt.plot(hist, color='blue')
plt.xlim([0, 256])
plt.ylim([0, 1000])
plt.show()
In the above code, we have used the plot()
function of matplotlib
to plot the histogram. The parameters xlim
and ylim
set the ranges of x and y-axis for the plot.
Similarly, we can plot the histograms of green and red channels. Here is the sample code:
import cv2
import matplotlib.pyplot as plt
# read the image
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
# calculate the histograms of blue, green and red channels
hist_blue = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_green = cv2.calcHist([img], [1], None, [256], [0, 256])
hist_red = cv2.calcHist([img], [2], None, [256], [0, 256])
# plot the histograms
plt.plot(hist_blue, color='blue')
plt.plot(hist_green, color='green')
plt.plot(hist_red, color='red')
plt.xlim([0, 256])
plt.ylim([0, 1000])
plt.show()
In the above code, we have calculated the histograms of blue, green, and red channels using the calcHist()
function and plotted them using the plot()
function of matplotlib
.
Plotting Histograms in Different Colors
The plot()
function of matplotlib
allows us to plot the histogram in different colors. We can pass the color parameter to the plot()
function to set the color of the histogram. Here is a sample code to plot the histogram of blue, green, and red channels in different colors:
import cv2
import matplotlib.pyplot as plt
# read the image
img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
# calculate the histograms of blue, green and red channels
hist_blue = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_green = cv2.calcHist([img], [1], None, [256], [0, 256])
hist_red = cv2.calcHist([img], [2], None, [256], [0, 256])
# plot the histograms in different colors
plt.plot(hist_blue, color='blue', alpha=0.5)
plt.plot(hist_green, color='green', alpha=0.5)
plt.plot(hist_red, color='red', alpha=0.5)
plt.xlim([0, 256])
plt.ylim([0, 1000])
plt.show()
In the above code, we have used the alpha
parameter to set the transparency level of the histogram.
Conclusion
In this article, we have learned how to plot histograms of different colors of an image in OpenCV Python. We have used the calcHist()
function of OpenCV to calculate the histograms and the plot()
function of matplotlib
to plot the histograms. We can use these techniques to analyze and visualize the distribution of colors in an image.