1.引子
一个像素是由不同颜色的像素组成的,那么像素在图像中的分布就称为这个图像的重要特征。直方图不仅仅可以用来观察图像,还可以起到改善图像外观、描述直方图内容的作用。
2.直方图实现
在一个单通道的灰度图像中,每个像素的值都介于0(黑色)——255(白色)之间。根据这点,灰度图像的直方图拥有256个条目,这些条目也称之为容器。分别称为0号容器到255号容器。
现在,我们以灰度形式读取一张图片,并且定义一个直方图处理类来方便的处理直方图操作。
在这个类中,我们先声明变量并编写构造函数:
private:
int histSize[1];
float hranges[2];
const float *ranges[1];
int channels[1];
public:
Histogram1D()
{
histSize[0] = 256;
hranges[0] = 0.0;
hranges[1] = 255.0;
ranges[0] = hranges;
channels[0] = 0;
}
这是一个处理单通道灰度图像类的成员变量,之后我们使用以下方法计算灰度直方图。
其中最主要的函数就是calcHist
calcHist(const Mat* images, int nimages,
const int* channels, InputArray mask,
OutputArray hist, int dims, const int* histSize,
const float** ranges, bool uniform = true,