直方图计算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 : 输入图像的数组。数组中的每幅图像深度和尺寸务必相同,通道数可以不必相同。

nimages: 输入的图像个数,也即是上面images数组大小。

channels: 用来计算直方图所对应的通道数组。channels数组大小代表计算直方图的维数,如果数组大小N == 1,则表示仅仅使用单通道图像计算一维直方图;如果N >= 2,则表示使用N幅通道图像计算N维直方图。当然这N幅图像怎么选择,就取决channels数组了。图像数组中第一幅图像的通道序号是从0到images[0].channels()-1, 第二幅图像根据自己所含的通道数在前一幅图像的最后序号依次增加,从images[0].channels()到images[0].channels() + images[1].channels() - 1,后面图像依次类推。比如images 数组大小为4, 前3幅图像均为彩色图像且含有BGR三通道,第4幅图像为灰度图像只有一通道。如果想使用第一幅图像G通道,第二幅图像B通道,第三幅图像的R通道以及最后一幅图像来计算四维直方图,那么channels可以这样定义:channels[4] = {1, 3, 8, 9}就可以取到对应通道的图像进行直方图计算。

mask:掩模图像

hist:是一个多维数组的直方图,维数与channels数组大小相同

dims:直方图维数与channels大小相同

histSize:每个维度的直方图尺寸数组 ,数组中每一个元素代表每一维中所含的bin个数

ranges:指出直方图每一维的每个bin的上下界范围数组的数组。如果是均匀分布,那么只要给出上下限即可,那么每个bin的宽度就是就(ranges[i][1] - ranges[i][0]) / histSize[i]; 如果是非均匀分布,那么一维数组ranges[i] 必须包含每个bin的上下限,相邻bin的上下限有重合的,无需重复包含,那么每一维中ranges[i]含有的元素个数为histSize[i]+1个。

其他参数略。

 

你可能感兴趣的:(Opencv)