`
阅读更多
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace cv;
using namespace std;

/**  @function main */
int main(int argc, char** argv)
{
	Mat src, dst;

	/// 加载源图像
	src = imread("D://b.png", 1);

	if (!src.data)
	{
		cout << "Usage: ./Histogram_Demo <path_to_image>" << endl;
		return -1;
	}

	/// 转为灰度图
	cvtColor(src, src, CV_BGR2GRAY);

	/// 应用直方图均衡化
	equalizeHist(src, dst);

	/// 创建窗口
	namedWindow("Source", CV_WINDOW_AUTOSIZE);
	namedWindow("equalized", CV_WINDOW_AUTOSIZE);
        //显示结果
	imshow("Source", src);
	imshow("equalized", dst);

	/// 等待用户按键退出程序
	waitKey(0);

	return 0;
}

 

  

        马上就要开会了,小编刚接触opencv就要给小伙伴们讲直方图均衡化了,有点小紧张,还是先做个笔记吧。

        首先,直方图是什么?

        直方图是图像中像素强度分布的图形表达方式,它统计了每一个强度值所具有的像素个数,描述了图像灰度值。

        像素:一幅图像是由许多的小格子组成的,这些小格子就是像素点,像素点组成像素。

        像素强度:0~255之间的值。在灰度图像中,它是图像的灰度值。

        

        如图所示,横坐标的值即像素强度从0到255,从暗到亮,左暗右亮,左边用于描述图像的暗度,右边用于描述图像的亮度。纵坐标表示像素量,峰值高则像素量多,峰值低则像素量少。

        图上的直方图说明,左边图像中暗的和亮的像素比较少,灰的像素比较多。

        再给大家举两个例子:


        

        
 
        然后,直方图均衡化是什么?

        https://blog.csdn.net/zhulf0804/article/details/52770613

        直方图均衡化是通过拉伸像素强度分布范围来增强图像对比。

        说得更清楚一些, 以上面的直方图为例,你可以看到像素主要集中在中间的一些强度值上。直方图均衡化要做的就是拉伸这个范围。见下面左图:绿圈圈出了少有像素分布其上的强度值。对其应用均衡化后,得到了中间图所示的直方图。均衡化的图像见下面右图。把图像变换成像素值是几乎均匀分布的图像。

        对比度:一幅图中灰度反差的大小。对比度 =  最大亮度/最小亮度。
 
                       
        最后,直方图均衡化是怎么做到的? (三步)


        第一步:把直方图的每个灰度级进行归一化处理。

        先说一下涉及到基本概念。

        灰度:灰度是表明图像明暗的数值,即黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。灰度值指的是单个像素点的亮度。灰度值越大表示越亮。

        灰度化:R=B=G。

        灰度值与像素值的关系:一张灰度图像的像素值就是它的灰度值。一张彩色图像的灰度值需要经过函数映射来得到。

        灰度级:灰度级表明图像中不同灰度的最大数量。灰度级越大,图像的亮度范围越大。

        归一化:https://www.cnblogs.com/curo0119/p/8421811.html

                      https://blog.csdn.net/lanmeng_smile/article/details/49903865

       归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。

        归一化函数normalize(),归一化之后所有的像素值都在[0,1]区间内。

 

        第二步:求每种灰度的累积分布,得到一个映射的灰度映射表。

        累积分布函数是单调增函数,并且值域是0到1。

        https://www.cnblogs.com/tianyalu/p/5687782.html

        用以下公式计算累积分布:
       
         其中,n是图像中像素的总和,nk是当前灰度级的像素个数,L是图像中可能的灰度级总数。

        假设有如下图像:

 
        
         得到的图像统计信息如下图所示,并根据统计信息完成灰度值映射:


        

        概率 = 像素个数 / 图像总的像素个数。如:0.25 = 4 / 16,0.1875 / 16。

        累积概率=概率的前k项之和。k是灰度级。如:第一行是0.25,第二行是0.25+0.1875=0.4375。第三行是0.25+0.1875+0.4375=0.75。

        映射后的灰度值=累积概率*255。如:0.25*255=63.75。0.4375*255=111.5625。


        映射后的图像如下所示:


       

        第三步:根据相应的灰度值来修正原图中的每个像素。

       

        代码附上,直接调用opencv中的equalizeHist( )函数,就能实现直方图的均衡化。

        
 

  • 大小: 17.8 KB
  • 大小: 221.1 KB
  • 大小: 225.3 KB
  • 大小: 17.7 KB
  • 大小: 4.5 KB
  • 大小: 7.3 KB
  • 大小: 26.2 KB
  • 大小: 8.6 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    opencv之直方图均衡化实例下载

    在这个"opencv之直方图均衡化实例下载"中,你将有机会深入学习和实践这一概念。 首先,让我们理解什么是图像直方图。直方图是描述图像像素亮度分布的一种统计图形。在二维图像上,每个像素都有一个灰度值(对于彩色...

    opencv实现直方图均衡化

    OpenCV是一个强大的开源计算机视觉库,它提供了多种图像处理功能,包括直方图均衡化的实现。本篇文章将深入探讨直方图均衡化的原理、OpenCV中的实现以及其在实际应用中的价值。 直方图均衡化是通过改变图像像素值的...

    C# opencvsharp直方图均衡化全局局部自适应直方图均衡化源码

    博客地址:https://blog.csdn.net/FL1623863129/article/details/137370741 测试环境:vs2019,netframework4.7.2,opencvsharp4.8.0

    OpenCV直方图均衡化

    ### OpenCV直方图均衡化 #### 知识点一:理解直方图与直方图均衡化的原理 **直方图**是统计学中的一种图表形式,它以条形的高度来表示数值出现的频率。在图像处理领域,直方图通常用来表示图像亮度或者颜色的分布...

    基于opencv的彩色图像直方图均衡

    本项目是在Visual Studio 2010环境下,利用OpenCV库开发的一个MFC(Microsoft Foundation Classes)程序,专用于对彩色图像进行直方图均衡化处理。 直方图均衡化是通过改变图像像素的分布,使图像整体对比度增强,...

    Qt+OpenCV2.4.4实现直方图均衡化增强图像对比度(Mat结构实现)

    在OpenCV中,`equalizeHist()`函数专门用于执行直方图均衡化。这个函数接受一个8位单通道的输入图像(即灰度图像),并返回一个经过均衡化的图像。在使用`equalizeHist()`之前,我们可能需要对原始图像进行预处理,...

    OpenCV通过直方图均衡化增强图像对比度

    OpenCV,全称Open Source Computer Vision Library,是一个功能丰富的开源计算机视觉库,提供了多种图像处理和计算机视觉的功能,包括直方图均衡化的实现。本文将深入探讨直方图均衡化的基本原理,OpenCV中如何实现...

    C# OpenCvSharp 直方图均衡化 图像去雾.rar

    C# OpenCvSharp 直方图均衡化 图像去雾 学习研究Demo,完整Demo,可直接运行 项目环境 VS2010+.net4.0+OpenCvSharp3 博客地址 https://blog.csdn.net/lw112190/article/details/131810530

    openCV实现直方图均衡化

    OpenCV是一个强大的开源计算机视觉库,它提供了丰富的函数来实现各种图像处理任务,包括直方图均衡化。本篇文章将详细介绍如何使用OpenCV实现直方图均衡化,并通过代码示例帮助初学者理解和应用这一技术。 直方图...

    opencv直方图均衡化

    opencv直方图均衡化程序,对学习opencv编程的会有所帮助

    用opencv完成对图像和视频的边缘检测和直方图均衡化等操作

    本项目聚焦于使用OpenCV在VC++环境下实现图像和视频的边缘检测以及直方图均衡化。以下是对这些核心概念的详细阐述。 1. **OpenCV库**:OpenCV是一个跨平台的计算机视觉库,包含了大量的图像处理和计算机视觉算法,...

    详细的opencv直方图均衡化

    OpenCV中的直方图均衡化主要通过`equalizeHist()`函数实现。这个函数对输入图像的灰度直方图进行操作,使得经过处理后的图像直方图更加平坦,从而提高图像的全局对比度。直方图均衡化的基本步骤如下: 1. 计算输入...

    opencv vc++/直方图均衡化

    OpenCV是一个强大的开源计算机视觉库,它提供了多种图像处理和计算机视觉功能,包括直方图均衡化。本教程将围绕OpenCV 2.244版本在VC++环境中实现直方图均衡化进行详细讲解。 首先,我们需要了解直方图均衡化的概念...

    RGB到HSV空间直方图均衡化 opencv

    使用opencv实现RGB空间到HSV空间的转换,并进行直方图均衡化

    直方图均衡化的opencv代码

    下面是一个简单的C++代码示例,展示了如何使用OpenCV进行直方图均衡化: ```cpp #include &lt;opencv2/opencv.hpp&gt; #include &lt;opencv2/highgui/highgui.hpp&gt; int main() { // 加载图像 cv::Mat img = cv::imread(...

    直方图均衡化_opencv图像_直方图均衡化_图像增强_图像均衡化_图像_

    OpenCV是一个强大的开源计算机视觉库,其中包含了实现直方图均衡化的功能。 直方图是描述图像灰度级分布的统计图表,每个灰度级对应一个频数,表示该灰度级在图像中出现的次数。如果图像的直方图集中在某个小范围内...

    直方图均衡化,直方图均衡化原理,Visual C++

    在本篇中,我们将深入探讨直方图均衡化的原理,以及如何利用OpenCV库在Visual C++环境中实现这一过程。 首先,我们需要理解直方图的概念。直方图是图像的一种统计表示,它展示了图像中各个灰度级出现的频率。对于...

    基于Android的OpenCV图像直方图均衡的实现

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样...

    CLAHE_改进版直方图均衡化CLAHE_CLAHE_直方图均衡化_自适应均衡化_

    直方图均衡化是一种图像处理技术,用于提升图像的对比度,特别是在图像中存在大量像素集中在亮度或灰度范围的某一端时效果显著。而CLAHE(Contrast Limited Adaptive Histogram Equalization,对比度受限的自适应...

    opencv 直方图均衡化

    OpenCV(Open Source Computer Vision Library)是一个强大的开源库,提供了丰富的图像处理函数,包括直方图均衡化的实现。在VC6.0环境下,我们可以利用OpenCV库来实现直方图均衡化。 直方图是描述图像像素亮度分布...

Global site tag (gtag.js) - Google Analytics