OpenCV实战(8)——直方图详解
0. 前言
图像由不同值(颜色)的像素组成,图像中像素值的分布构成了该图像的一个重要特征。本节介绍图像直方图的概念,学习如何计算直方图以及如何使用它来修改图像的外观。直方图还可用于表征图像的内容并检测图像中的特定对象或纹理。
1. 直方图概念
一张图像由若干像素组成,每个像素如果包含一个值(一个通道),则可以组成一张灰度图像;或者如果每个像素包含三个值(三个通道),则可以组成一张彩色图像。每个通道的取值范围为 0
到 255
。根据图像的内容,每个灰度值具有不同数量。
图像直方图是一种反映图像色调分布的直方图,其绘制每个色调值的像素数,每个色调值的像素数也称为频率 (frequency
)。因此,灰度图像的直方图有 256
个条目(也称柱条或 bin
)。bin 0
表示值为 0
的像素数,bin 1
表示值为 1
的像素数,依此类推。显然,如果对直方图的所有 bin
求和,可以得到图像中的像素总数。直方图也可以归一化,使得 bin
的总和等于 1
,在这种情况下,每个 bin
都表示图像中具有此色调值的像素数所占百分比。
使用 cv::calcHist()
函数可以方便的计算图像直方图。这是一个通用函数,可以计算任何像素值类型和范围的多通道图像的直方图。