您的位置:首页 > 其它

关于calchist()中的channels参数的说明

2016-10-24 22:00 309 查看
 OpenCV提供了calcHist函数来计算图像直方图。
         其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray

hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=

false );
          void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, SparseMat&

hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=

false );
         参数解释:
        arrays。输入的图像的指针,可以是多幅图像,所有的图像必须有同样的深度(CV_8U or CV_32F)。同时一副图像可以有多个channels。
        narrays。输入的图像的个数。
        channels。用来计算直方图的channes的数组。这里只以输入图像是一张图像的情况说明,做了一个小实验。首先定义int channels[1];当我们给channels[0]赋值为0的时候,输出一个直方图的值,见下图:



给channels[0]=1的时候输出直方图的值见下图:



然后我们把图片分成bgr通道,取第一个通道,即b通道,然后对这个通道进行统计直方图,见下图:



可以观察到,第一张和第三张的直方图数值是一样的,因此得出结论:
当输入图像为多通道图像时,channels[0]={0},表示的是取其第一个通道,channels[0]={1}表示取其第二个通道,以此类推,channels[2]={1,2}表示的是取其第2个和第3个通道的图像进行直方图统计。
        mask。掩码。如果mask不为空,那么它必须是一个8位(CV_8U)的数组,并且它的大小的和arrays[i]的大小相同,值为1的点将用来计算
直方图。
        hist。计算出来的直方图
        dims。计算出来的直方图的维数。
        histSize。在每一维上直方图的个数。简单把直方图看作一个一个的竖条的话,就是每一维上竖条的个数。
        ranges。用来进行统计的范围。比如
         float rang1[] = {0, 20};
        float rang2[] = {30, 40};
        const float *rangs[] = {rang1, rang2};那么就是对0,20和30,40范围的值进行统计。
       uniform。每一个竖条的宽度是否相等。
       accumulate。Accumulation flag. If it is set, the histogram is not cleared in the beginning

when it is allocated. This feature enables you to compute a single histogram from several

sets of arrays, or to update the histogram in time.  是否累加。如果为true,在下次计算的时候不会首先清空hist。这个地方我是这样理解的,不知道有没有错,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: