25 二维直方图
opencv知识点:
- 计算直方图数据 -
calcHist
- 四舍五入浮点数 -
cvRound
- 寻找最小/最大值 -
minMaxLoc
本课所解决的问题:
- 如何绘制HSV图像的二维直方图?
1.二维直方图
上节课中,我们学习了一维直方图的绘制,那我们该如何绘制二维直方图呢?
关于二维直方图的绘制,我们通常选择HSV模式下的图像
我们回顾HSV
的知识,可以发现
-
H(色调)范围是[0,180]
-
S(饱和度)范围是[0,255]
-
V(明度)范围是[0,255]
即HS两个通道就可以表示颜色,非常方便二维直方图的绘制
在opencv
中,如果我们想绘制二维维直方图,要用到三个API
calcHist
cvRound
minMaxLoc
介绍如下
calcHist
calcHist
计算一维数组的直方图(输入图像可以有多通道)
共10个参数
第1个参数 图像数组
第2个参数 输入图像数量
第3个参数 通道数组
第4个参数 可选mask
第5个参数 输出直方图数据(值与对应频次)的n维数组
第6个参数 直方图维数
当通道为1个时,我们选择维度为1维,此时直方图数据就为一维数组
当维度为2个时,我们选择维度为2维,此时直方图数据就为二维数组
………………
最大支持32维
也就是说,n张图像 每张图像m个通道 可以计算出相应的直方图数据
但对于绘制来说,一般都只绘制到2维,3维及以上就很复杂了
第7个参数 histSize( bins数组,x轴长度)
第8个参数 ranges(取值范围数组)
//以下参数暂时用不到
第9个参数 指示直方图bin间隔是否一致
默认为true,即等间隔取值
如果为false,则range不能写{
0,255}这种,就要写{
1,1,……,1}这种
第10个参数 累计标志(默认为false)
当多张图像的时候,
如果为true,则绘制直每张方图的时候,不会从头清空
会在前者直方图的基础上继续
cvRound
cvRound
将浮点数四舍五入到最近的整数
共1个参数
第1个参数 要处理的浮点数
minMaxLoc
minMaxLoc
寻找最小/最大值
共5个参数
第1个参数 输入
第2个参数 输出的最小值
第3个参数 输出的最大值
第4个参数 最小值下标
第5个参数 最大值下标
2.绘制二维直方图
本课中计算的直方图维数为2维,采取方式为
- 先转换色彩空间为
HSV
- 然后进行每个通道的直方图数据计算,得到二维数组
- 最后利用直方图二维数组绘制直方图
</