代码见:http://download.csdn.net/detail/u010525655/6196983
图像由许多的像素组成。这些像素的分布和值包含了图像的许多重要的信息。利用这些信息我们可以计算出图像的直方图,并且去改善图片的效果,检测图像的纹理等。下面我们就来看一下怎么得到图像的直方图。
直方图给出了相同灰度值的像素个数。灰度图的直方图基本上有256个坐标点。0点给出了图像中所有灰度值为0的像素的个数等等依次类推。算出所有坐标值的和,也就得到了总的像素数。直方图也可以被规范化,也就是说坐标值的和为1,也就是说每个坐标的值是所占像素总个数的百分比。
OpenCV计算直方图使用cv::calcHis函数。他可以计算多个信道的各种图像类型的直方图。让我们来写一个类来更方便的使用它。
先让我们了解一下cv::calcHist:
void calcHist(const Mat*images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, booluniform=true, boolaccu-mulate=false)
images – Source arrays. They all should have the same depth,CV_8UorCV_32F, and thesame size. Each of them can have an arbitrary number of channels.
nimages– Number of source images.
channels – List of the dims channels used to compute the histogram. The first ar-ray channels are numerated from 0 to images[0].channels()-1 , the second ar-raychannels are counted from images[0].channels() to images[0].channels() +images[1].channels()-1, and so on.
mask– Optional mask. If the matrix is not empty, it must be an 8-bit array of the same size as images[i]. The