🎉🎉🎉
欢迎各位来到小白
p
i
a
o
的学习空间!
\color{red}{欢迎各位来到小白piao的学习空间!}
欢迎各位来到小白piao的学习空间!🎉🎉🎉
💖💖💖
持续更新,期待关注!
\color{blue}{持续更新,期待关注!}
持续更新,期待关注!💖💖💖
🤞🤞🤞
目前已经为大家更新了:
\color{green}{目前已经为大家更新了:}
目前已经为大家更新了:🤞🤞🤞
- Python基础、中级、高级;
- C++数据结构和算法;
- OpenCV相关内容等重点内容
🌹🌹🌹 我的主页: \color{purple}{我的主页:} 我的主页:我的主页🌹🌹🌹
目录
- 一、直方图相关概念
- 1.1 直方图
- 1.2 图像直方图
- 二、openCV关于直方图的均衡化
- 2.1 什么是直方图均衡化?
- 2.2 OpenCV中直方图均衡化的方法
- 2.3 效果展示
前文链接:【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))
一、直方图相关概念
1.1 直方图
直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。 为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。
直方图也可以被归一化以显示“相对”频率。 然后,它显示了属于几个类别中的每个案例的比例,其高度等于1。
资料来源:百度百科-直方图
简而言之,直方图是一种用于表示某个范围内相邻的段(段的范围为1/n,n为整个范围中段的个数)的值的分布情况的数据统计图。
1.2 图像直方图
图像直方图即图像每个强度范围的像素数组成的直方图。
- 制做一张图像直方图的原理举例:
1、得到每个像素点的强度
2、计数每个强度范围内(或者每个强度的)像素的个数。例如其中强度范围0-1的像素个数为8(注意每个范围必须相邻且不重合,还需要相等大小,例如:第一个范围为0-1,那么第二个范围一定是2-3)
3、得到直方图,实际上就是小学数学中的条形统计图了(横轴(x轴)为强度或者强度范围,纵轴(y轴)为该该强度强度或者范围下像素点的个数)。
二、openCV关于直方图的均衡化
2.1 什么是直方图均衡化?
是一种利用图像直方图对图像的对比度调节的方法。以此来扩展强度的范围。例如:
例如上图中,我们假设边缘强度(绿色圈内)对图像对比度的贡献不大,因为有用区域即为绿圈以外区域,所以利用直方图均衡化扩展了有用区域强度的范围。
2.2 OpenCV中直方图均衡化的方法
- 使用函数:equalizeHist()
- 函数原型:
void cv::equalizeHist(InputArray src, OutputArray dst )
-
参数解释:
- src:输入的原始图像
- dst:经过均衡化处理之后的图像
-
函数功能:均衡化灰度图像的直方图。
-
函数原文:直方图均衡化函数
2.3 效果展示
- 源代码:
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace std;
using namespace cv;
int main(void)
{
Mat src;
Mat grayForSrc;
Mat dstImag;
src = imread("/home/aelx-chen/demo.jpg");
cvtColor(src, grayForSrc, cv::COLOR_BGR2GRAY);//将原图像灰度处理
equalizeHist(grayForSrc, dstImag);//将灰度图的直方图均衡化
imshow("gray", grayForSrc);//处理前的灰度图
imshow("dstForEqualization", dstImag);//显示均衡化之后的结果
imshow("src", src);//原图像
waitKey(0);
return 0;
}
-
直方图均衡化之前:
-
直方图均衡化之后:
💖💖💖 持续更新,快来动手试试看! \color{blue}{持续更新,快来动手试试看!} 持续更新,快来动手试试看!💖💖💖