基本概念
- 对于图像梯度、像素值、像素角度等一切图像的属性值,都可以通过统计建立直方图。
基于图像像素灰度直方图比较常见。 - 直方图常见属性:
dims 表示维度,对灰度图像来说只有一个通道值,dims=1;
bins 表示在维度中子区域大小划分,划分256个级别则 bins=256;
range 表示值得范围,灰度值范围为 [0~255] 之间;
API说明
-
把多通道图像分为多个单通道图像
split(
InputArray src, // 输入图像
*Mat mvbegin // 输出的通道图像数组
) -
直方图计算
calcHist(
const Mat* images, // 输入图像
int nimages, // 输入图像的个数
const int* channels, // 通道数?(用法暂时未知)
InputArray mask, // 输入mask,忽略(用法暂时未知)
OutputArray hist, // 输出的直方图数据
int dims, // 维数,需要统计直方图通道的个数
const int* histSize, // 直方图级数,bins
const float** ranges, // 值域范围,统计像素值区间
bool uniform = true, // 是否对得到的直方图数组进行归一化处理
bool accumulate = false // 在多个图像时,是否累计算像素值得个数
)
程序实例
int main()
{
src = imread("E:/Image/cat.jpg");
if (src.empty())
{
cout << "could not load image..." << endl;
return 0;
}
imshow("src image", src);
//分通道
vector<Mat> bgr_mvbegin;
split(src, bgr_mvbegin);
//计算直方图
int histSize = 256;
float range[] = {
0,255 };
const float* histRange = {
range };
Mat b_hist, g_hist, r_hist;
calcHist(&bgr_mvbegin[0]