您的位置:首页 > 运维架构

opencv 直方图calcHist

2016-03-02 11:19 246 查看
calcHist函数的channels参数和narrays以及dims共同来确定用于计算直方图的图像;

首先dims是最终的直方图维数,narrays指出了arrays数组中图像的个数,其中每一幅图像都可以是任意通道的【只要最终dims不超过32即可】

Channels为图像通道数,rgb为三个通道也就是2(012),

如果channels参数为0,则narrays和dims必须相等,否则弹出assert,此时计算直方图的时候取数组中每幅图像的第0通道。

当channels不是0的时候,用于计算直方图的图像是arrays中由channels指定的通道的图像,channels与arrays中的图像的对应关系,如channels的参数说明的,将arrays中的图像从第0幅开始按照通道摊开排列起来,然后channels中的指定的用于计算直方图的就是这些摊开的通道;

意思是本来index=r*256*256+g*256+b

顺序为rgb(opencv为bgr,所以应该为2 1 0)

假设有arrays中只有一幅三通道的图像image,那么narrays应该为1,如果是想计算3维直方图【最大也只能是3维的】,想将image的通道2作为第一维,通道0作为第二维,通道1作为第三维,则可以将channels设置为channesl={2,0,1};这样calcHist函数计算时就按照这个顺序来统计直方图。

可以看出channels不为0时narrays可以和dims不相等,只要保证arrays中至少有channels指定的通道就可以。

Opencv 计算直方图主要在函数calcHist_8u里面,而其中又有一个重要的函数

calcHistLookupTables_8u()。他会计算出_tab[],这个数组表示每个数应该处于的位置index。比如1 2 3 4 5 6 ;均匀3个size的直方图,那么1 2的index=0,3 4的index=1;5 6的index=2;直接通过hist[index[image[I,j]]]即可得到直方图,大大的加快了速度,

对于多维情况同样如此,二维计算方法应该是ima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: