图像直方图包含图像的丰富的信息,反应了图像像素的概率分布情况。对于灰度图像f(x,y),
表示灰度级k出现的频率,则灰度级k像素点出现的概率为:
其中N是所有的灰度级数,r是图像中得所有像素数,对概率分布 进行累计求和便得到累计归一化直方图 :
灰度直方图用来描述各个灰度级像素个数出现的频率,灰度直方图的横坐标为灰度级数,从坐标则表示该灰度级出现的频率。对于灰度级范围在[0,N-1]的图像,直方图可表示为 ,对于灰度图像,其256级灰度图像可以变换到0-255。opencv中提供了一个计算灰度级直方图的函数,函数原型如下:
1 | 1)void cv::calcHist(const Mat *images, |
参数说明:
images : 表示图像列表,这些图像必须有相同的深度信息CV_8U,CV_16U或者CV_32F,并且这些图像的大小相同,这些图像可以有任意的通道数量。
nimages : 表示输入源的图像个数;
channels : 表示需要统计的图像通道索引
mask:可选掩码,如果图像不为空,则此参数必须为8位且和图像大小相同,掩码中的非零元素标记需要在直方图中计算的数组元素;
hist :输出计算得到的直方图,是一个密集或者稀疏矩阵;
dims:输出的直方图的维度,灰度为1,彩色为3,在opencv中最大为32即CV_MAX_DIMS;
histSize:直方图横坐标的区间数,支出直方图每一维大小的数组
ranges:用于住处直方图中得每一个bin的上下界的浮动范围数组的数组,对于均匀直方图而言,该数组只有两个元素;
uniform: 直方图是否均匀的标志;
accumulate: 累计标志,用于标志是否清除开始计算时直方图累计的标志。
示例代码如下:
1 |
|
结果如图: