OPENCV3学习日志(二)————直方图的计算calcHist()和绘制

1、直方图简介:

直方图是对数据统计的一种方法,并将统计值放到一系列的BIN中。

例如我们可以将图像的灰度值进行统计,将灰度值均匀分成若干份,例如[0,255] = [0,15] U [16,31].... 然后在统计每一个区间上的像素数目,就可绘制出一个直方图。

下边介绍一下直方图的一些术语和细节

dims  需要统计的特征数目,在上例中 dims = 1.

bins   每个特征分的子区间数目,在上例中 bins = 256 / 16 = 16.

range 每个空间特征的取值范围,上例中为 [0,255]

2、计算直方图函数 calcHist()

calcHist(const Mat* images, int nimages, const int* channels, InputArray mast, OutputArray hist, int dims, const float** tanges, bool uniform = true, bool accumlate = false)

第一个参数:输入的多个图像

第二个参数:输入图像的总数

第三个参数:指明每个图像中需要统计的通道,以索引的形式指明,索引的计算方法为 [0, images[0].channels() - 1] 为第一个图像通道对应的索引区间, [ images[0].channels(), images[0].channels() + images[1].channels() - 1]为 第一个图像通道对应的索引区间,以此类推,例如,第一个参数载入了两个三通道图像,现在想要统计两个图像的第一通道,那第三个参数应该为{0, 3}。

第四个参数:掩膜,需要和输入图像具有相同的尺寸,只统计掩膜中不为0的像素点。

第五个参数:OutputArray 类型的hist 输出的目标直方图,一个二维数组,建议使用    MatND类型的数据结构储存。

第六个参数:int 的 dims计算的直方图的维度,必须是整数且不大于CV_MAX_DIMS

第七个参数:histSize 存放每个维度的直方图尺寸的数组,即每个维度柱状图的条数

第八个参数:ranges 每一个维度的取值范围

第九个参数:指示直方图是否均匀的标识符。

第十个参数:累计表示符,若为true,直方图在配置阶段不会被清零,此功能主要是允许从多个阵列中计算单个直方图,或者用于在特定的时间更新直方图。

3、绘制直方图函数

可以使用MatND类中的at函数获取直方图中矩形的高度,再利用绘制矩形的函数rectangle绘制,例如:

可以采取如下代码绘制一维直方图

OPENCV3学习日志(二)————直方图的计算calcHist()和绘制_第1张图片


你可能感兴趣的:(其他)