opencv —— equalizeHist 直方图均衡化

直方图均匀化简介

从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内。这就导致了图片的强弱对比不强烈。

直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的形式,从而增加像素灰度值的动态范围,达到增强图像整体对比度的效果。

直方图均衡化的列表计算


序号


运算

步骤和结果

1


列出原始图灰度值 f(0 ≤ f ≤ L-1)

0 1 2 3 4 5 6 7
2 列出原始直方图(概率表达) 0.02 0.05 0.09 0.12 0.14 0.2 0.22 0.16
3 计算原始累计直方图 gf(灰度值 ≤ f 的概率和) 0.02 0.07 0.16 0.28 0.42 0.62 0.84 1.00
4 取整 g=(int) [(L-1)·gf + 0.5] 0 0 1 2 3 4 6 7
5 确定对应关系(原灰度值 -> 新灰度值) 0->0  1->0  2->1  3->2  4->3  5->4  6->6  7->7 
6 更新直方图 0.07 0.09 0.12 0.14 0.2 0 0.22 0.16

实现直方图均衡化:equalizeHist 函数

equalize 函数实现的灰度直方图均衡化算法,就是把直方图的每个灰度值进行归一化处理,求每种灰度的累积分布,接着得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。

void equalize(InputArray src, OutputArray dst);

  • src,输入图像,即源图像,填 Mat 类的对象即可,但需要为 8 位单通道的图像。
  • dst,输出结果,需要和源图像有一样的尺寸和类型。

代码示例:

#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
    Mat src = imread("C:/Users/齐明洋/Desktop/1.jpg");
    imshow("src", src);

    Mat gray, dst;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    imshow("gray", gray);
    equalizeHist(gray, dst);
    imshow("dst", dst);

    waitKey(0);

}

效果展示:

原文地址:https://www.cnblogs.com/bjxqmy/p/12341056.html

时间: 2024-08-28 22:46:54

opencv —— equalizeHist 直方图均衡化的相关文章

opencv图像直方图均衡化及其原理

直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均衡化作用:用来增强对比度. 这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好地在直方图上分布.这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能. 这种方法对于背景和前景都太亮或者太

OpenCV-跟我一起学数字图像处理之直方图均衡化

从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致图像的层次不够分明,直方图均衡化就是为了让图像的灰度分布更均匀,图像的层次感更强. 数学原理 基于连续灰度分布的结论推导 直方图均衡化属于数字图像处理中灰度变换(intensity transformation)的内容,灰度变换的目的就是找到一个合适的映射函数s=T(r).将原图像的灰度值映射到新的

图像直方图均衡化增强opencv与C语言版

本文实现彩色图像的全局直方图均衡.分别对R/G/B三通道均衡,读写图片采用OpenCV.代码如下: #include <opencv2/opencv.hpp> //#include <cv.h> //#include <cxcore.h> //#include <highgui.h> #include <time.h> #include <stdio.h> #include <math.h> #include "

Opencv图像识别从零到精通(10)-----直方图均衡化与直方图拉伸

 一.直方图均衡化 直方图均衡化是灰度变换的一个重要应用,广泛应用在图像增强处理中,它是以累计分布函数变换为基础的直方图修正法,可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素的取值动态范围.许多图像的灰度值是非均匀分布的,其中灰度值集中在一个小区间内的图像是很常见的,直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的方法,经过直方图均衡化的图像对二值化阈值选取十分有利.一般来说,直方图修正能提高图像的主观质量,因此在处理艺术图像时非常有用.直方图均衡化处理的中心思想是把原始

Qt 5.3 下OpenCV 2.4.11 开发(9)直方图均衡化

接着上面的章节,我们在 Histogram1D 类中加入一个新方法,即直方图均衡化的方法,现在贴出完整的代码,Histogram1D 类 头文件如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> using namespace

OpenCV——直方图均衡化(用于图像增强)

1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 #include <math.h> 4 5 using namespace cv; 6 using namespace std; 7 8 9 int main(int argc, char** argv) 10 { 11 Mat src,src_gray,dst; 12 //src = imread("3 input.bmp"); 13 s

opencv直方图均衡化

#include <iostream> #include "highgui.h" #include "cv.h" #include "cxcore.h" #include "math.h" using namespace std; using namespace cv; //绘制1维直方图 Mat draw1DHistogram(Mat histogramMat) { double maxVal = 0, minV

《OpenCV:直方图应用:直方图均衡化,直方图匹配,对比直方图》

直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种.对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决定,即: 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数过程.从分布图上的理解就是希望原始图像中y轴的值在新的分布中尽可能的展开.变换过程是利用累积分布函数对原始分布进行映射,生成新的均匀拉伸的分布.因此对应每个点的操作是寻找原始分布

直方图均衡化 EqualizeHist

核心函数: cvEqualizeHist 程序: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> int EqualizeHist(int argc,char** argv) { IplImage* src=cvLoadImage("e:\\picture\\4.jpg"); IplImage* SrcB=cv