Using histogram, we can visualize the distribution on pixel intensities in an image.
Using cv2.calcHist method, we can compute histogram from an image or specific portion of the image.
Why histogram needed?
Using histogram, we can visualize the distribution on pixel intensities in an image.
Signature
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
Following table summarizes the parameters of calcHist method.
Parameter |
Description |
images |
It is a list of source images from which you want to calculate the histogram. |
channels |
Specifies which color channels of image you want to consider while calculating histogram.
For a grayscale image, it is set to [0].
For a BGR image, you can specify [0], [1], or [2] for the blue, green, and red channels. |
mask |
It is used to calculate histogram for specific region in the image. This is set to None, if you want to calculate histogram for entire image. |
histSize |
Specifies number of bins in the histogram. |
ranges |
Specify range of pixel values in each channel.
For grayscale images, it is usually [0, 256] to cover the full range of pixel values.
For color images, you might use [0, 256] for each channel. |
hist |
This is optional, specifies an output parameter where the calculated histogram is stored |
accumulate |
This is optional parameter. If set to True, the histogram is not cleared in the beginning but is accumulated. This can be useful when you want to calculate histograms for multiple images and accumulate them. |
Example
image = cv.imread('flowers.jpeg')
colors = ('b', 'g', 'r')
for index, color in enumerate(colors):
hist = cv.calcHist([image], [index], None, [256], [0,256])
plt.plot(hist, color=color)
plt.xlim([0, 256])
Above snippet calculate the histogram for all the three color channels.
Find the below working application.
bgr_image_histogram.py
import cv2 as cv
import matplotlib.pyplot as plt
image = cv.imread('flowers.jpeg')
colors = ('b', 'g', 'r')
for index, color in enumerate(colors):
hist = cv.calcHist([image], [index], None, [256], [0,256])
plt.plot(hist, color=color)
plt.xlim([0, 256])
cv.imshow('Image', image)
plt.title('Histogram for image')
plt.xlabel('bins')
plt.ylabel('Number of Pixels')
plt.xlim([0, 256])
plt.show()
cv.waitKey(0)
# Close the OpenCV windows
cv.destroyAllWindows()
Output
Original image
Histogram
Previous Next Home
No comments:
Post a Comment