OpenCV灰度直方图的计算 直方图的计算是很简单的,无非是遍历图像的像素,统计每个灰度级的个数。在OpenCV中封装了直方图的计算函数calcHist,为了更为通用该函数的参数有些复杂,其声明如下:
void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform = true, bool accumulate = false ); 该函数能够同时计算多个图像,多个通道,不同灰度范围的灰度直方图. 其参数如下:
images,输入图像的数组,这些图像要有相同大大小,相同的深度(CV_8U CV_16U CV_32F). nimages ,输入图像的个数 channels,要计算直方图的通道个数。 mask,可选的掩码,不使用时可设为空。要和输入图像具有相同的大小,在进行直方图计算的时候,只会统计该掩码不为0的对应像素 hist,输出的直方图 dims,直方图的维度 histSize,直方图每个维度的大小 ranges,直方图每个维度要统计的灰度级的范围 uniform,是否进行归一化,默认为true accumulate,累积标志,默认值为false。 为了计算的灵活性和通用性,OpenCV的灰度直方图提供了较多的参数,但对于只是简单的计算一幅灰度图的直方图的话,又显得较为累赘。这里对calcHist进行一次封装,能够方便的得到一幅灰度图直方图。