opencv学习(三十七)之图像直方图计算calcHist()

图像直方图是表示数字图像中亮度分布的统计图,OpenCV的calcHist()函数用于计算图像直方图。文章详细介绍了直方图的概念,包括bins、dims和range等参数,并通过示例代码展示了如何使用calcHist()计算并绘制直方图,同时提到了配合minMaxLoc()和normalize()函数进行图像处理的方法。
摘要由CSDN通过智能技术生成

图像直方图是对数据集合的一种统计方法,将统计结果分布于一系列预定义的bin中,bin是直方图中经常用到的一个概念,其数值是从数据中计算出的特征统计量,这些数据不仅仅指的灰度值,统计数据可能是任何能有效描述图像的特征包括梯度、方向、色彩或任何其他特征。直方图获得的是数据分布的统计图,通常直方图的维数要低于原始数据。
图像直方图是用以表示数字图像中亮度分布的直方图,标绘了图像中亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布,这种直方图中横坐标的左侧为纯黑或较暗区域,右侧为较亮纯白的区域。因此一张较暗图片的图像直方图中数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。计算机视觉领域长借助图像直方图来实现图像的二值化。直方图意义如下:
. 直方图是图像中像素强度分布的图形表达方式。
. 它统计了每个强度值所具有的像素个数。
假设有一个矩阵包含一张图像信息(灰度值0-255),如下:
这里写图片描述

如果按照某种方式去统计这些数字,已知数字的范围包含256个值,将这个范围分割成子区域就是bins,如:

这里写图片描述

然后再统计在每一个bin的像素数目。采用这一方法统计上面的数字矩阵我们可以得到下图(x轴表示bin, y轴表示各个bin中的像素个数)。
这里写图片描述

以上只是一个所名直方图如何工作以及它的用处的简单示例。直方图可以统计的不仅仅是颜色灰度,它可以统计任何图像特征(如梯度,方向等等).具体阐述以下直方图的具体细节:
a. dims: 需要统计的特征的数据,上面的例子中,dims=1因为我们仅仅统计了灰度值(灰度图像)
b. bins:每个特征空间子区段的数据,上面的例子中bins=16
c. range: 每个特征空间的取值范围,在上面的例子中range=[0,255]
如果想统计两个特征,直方图就由上面的二维扩展为三维,x轴和y轴分别代表一个特征,z轴是再bin区间的样本数据,同样的方法适用于更多多维度的情况。
在opencv中提供了calcHist()函数计算图像的直方图,计算完成后可以采用前面提到的opencv中的绘图函数如rectangle、line()等绘制显示出来.calcHist()函数原型如下:

void cv::calcHist   (   const Mat *     images,
        int     nimages,
        const int *     channels,
        InputArray      mask,
        OutputArray     hist,
        int     dims,
        const 
  • 16
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值