直方图和直方图同等化(直方图均衡化)【C++的OpenCV 第十课-OpenCV图像常用操作(七)】

文章介绍了直方图的概念,包括它是如何表示数据分布的,并特别讨论了图像直方图。接着,文章详细阐述了OpenCV中的直方图均衡化方法,使用equalizeHist函数来增强图像的对比度,并提供了相关代码示例。最后,展示了直方图均衡化前后图像的效果差异。
摘要由CSDN通过智能技术生成

🎉🎉🎉 欢迎各位来到小白 p i a o 的学习空间! \color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白piao的学习空间!🎉🎉🎉

🌹🌹🌹 我的主页: \color{purple}{我的主页:} 我的主页:我的主页🌹🌹🌹


一、直方图相关概念

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}{持续更新,期待关注!} 持续更新,期待关注!💖💖💖
    🤞🤞🤞 目前已经为大家更新了: \color{green}{目前已经为大家更新了:} 目前已经为大家更新了:🤞🤞🤞

  1. Python基础、中级、高级;
  2. C++数据结构和算法;
  3. OpenCV相关内容等重点内容

前文链接:【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白piao

创作不易,支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值