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
首先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
相关文章推荐
- nginx 跳转指定接口
- noitatoNhsiloPesreveRetaulavE.150
- deepin linux系统 图像处理及机器学习开发环境配置方法
- 文章标题
- Android系统架构
- linux 复制目录结构,但不复制文件
- Shell脚本学习入门(一)
- 学习Linux决心书
- 使用 Apache CXF 实现 Web Service 详解
- MAKEFILE学习笔记--简介
- OpenCV矩阵运算
- linux 下怎样用 eclipse 编译 c++
- 在win10系统下搭建网站遇到“无法枚举容器中的对象,访问被拒绝”问题
- 大型网站演化历程
- linux下svn命令使用大全:二
- Tomcat服务器logs文件夹中不再产生日志文件
- 可扩展Web架构与分布式系统(转)
- 简述Linux命令初使用
- hbase shell基础和常用命令详解(转)
- linux--mysql的安装与配置