OpenCV学习 day12 直方图
2020-05-28 17:19:53
直方图Histogram
图像直方图,是指对整个图像在灰度范围内的像素值(0~255)根据不同的范围统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。

上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。
直方图最常见的几个属性:
- dims 表示维度,对灰度图像来说只有一个通道值dims=1
- bins 表示在维度中子区域大小划分,bins=256,划分为256个级别
- range 表示值得范围,灰度值范围为[0~255]之间
直方图均衡化
拉伸灰度值范围,提高图像对比度,通过remap从一个分布映射到另一个分布上

API
equalizeHist( InputArray src,//输入图像,必须是8-bit的单通道图像 OutputArray dst// 输出结果 )
代码演示
int equalize_Hist(Mat src) { Mat dst; cvtColor(src, src, COLOR_BGR2GRAY); equalizeHist(src, dst); imshow("equalize histogram image", dst); waitKey(0); return 0; }
直方图计算
API
split(// 把多通道图像分为多个单通道图像 const Mat &src, //输入图像 Mat* mvbegin)// 输出的单通道图像数组 calcHist( const Mat* images,//输入图像指针 int images,// 图像数目 const int* channels,// 通道数 InputArray mask,// 输入mask,可选,不用 OutputArray hist,//输出的直方图数据 int dims,// 维数 const int* histsize,// 直方图级数 const float* ranges,// 值域范围 bool uniform,// true by default bool accumulate// false by defaut 多通道true )
直方图比较方法
0——HISTCMP_CORREL 相关性 越接近1表示越像
1——HISTCMP_CHISQR 卡方 越接近0表示越像
2——HISTCMP_INTERSECT 交集法 数值越大表示越像
3——HISTCMP_BHATTACHARYYA(HISTCMP_HELLINGER = HISTCMP_BHATTACHARYYA) 常态分布比对的BHATTACHARYYA距离法 越接近0表示越像
4——HISTCMP_CHISQR_ALT
5——HISTCMP_KL_DIV
对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进 而比较图像本身的相似程度。
Opencv提供的比较方法有四种:
- Correlation 相关性比较

- Chi-Square 卡方比较

- Intersection 十字交叉性

- Bhattacharyya distance 巴氏距离

浙公网安备 33010602011771号