OpenCV calcHist()函数:计算直方图(附带实例)
在 OpenCV 中,封装了直方图的计算函数 calcHist(),该函数能够同时计算多个图像、多个通道、不同灰度范围的灰度直方图。
calcHist()函数声明如下:
在 OpenCV 中,用 calHist() 函数得到直方图数据后就可以将其绘制出来了。
【实例 1】得到某图像的灰度直方图。
运行工程,结果如下图所示:
当然,在使用颜色图像检索之类的方法时,我们需要的是 BGR 直方图,原理类似,统计时使用 cv2.calcHist() 函数。
【实例 2】绘制 BGR 直方图。
calcHist()函数声明如下:
calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist各个参数的含义如下:
- images 表示图像矩阵,这些图像必须有相同的大小和深度;
- channels 表示要计算直方图的通道个数;
- mask 表示可选的掩码,不使用时可设为空,mask 必须是一个 8 位的数组并且和 images 的数组大小相同,在进行直方图计算的时候只会统计该掩码不为 0 的对应像素;
- histSize 表示直方图每个维度的大小;
- hist 表示输出的直方图;
- ranges 表示直方图每个维度要统计的灰度级的范围;
- accumulate 表示累积标志,默认值为 False。
在 OpenCV 中,用 calHist() 函数得到直方图数据后就可以将其绘制出来了。
【实例 1】得到某图像的灰度直方图。
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('test.jpg',0) plt.hist(img.ravel(),256,[0,256]); plt.show()一般使用 Matplotlib 绘制直方图。这里要提一下 matplotlib.pyplot.hist() 函数,该函数可以直接使用统计数据绘制直方图,统计函数为 calcHist() 或 np.histogram()。
运行工程,结果如下图所示:

当然,在使用颜色图像检索之类的方法时,我们需要的是 BGR 直方图,原理类似,统计时使用 cv2.calcHist() 函数。
【实例 2】绘制 BGR 直方图。
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('test.jpg',1) color = ('b','g','r') for i,col in enumerate(color): histr = cv2.calcHist([img],[i],None,[256],[0,256]) plt.plot(histr,color = col) plt.xlim([0,256]) plt.show()上述代码中演示了 calcHist() 函数的使用。运行工程,结果如下图所示:
