1、EqualizeHist函数

函数作用:

直方图均衡化,,用于提高图像的质量

2、EqualizeHist函数调用形式

C++:void equalizeHist(InputArray src, OutputArray dst)

opencv代码:

<span style="font-family:sans-serif;">#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>using namespace cv;
using namespace std;
int main()
{Mat src = imread("D:6.jpg", 1);cvtColor(src, src, CV_BGR2GRAY);Mat dst;equalizeHist(src, dst);imshow("shiyan", dst);waitKey(0);return 0;
}</span>

参考别人的:

直方图均衡化

目标

在这个教程中你将学到:

  • 什么是图像的直方图和为什么图像的直方图很有用
  • 用OpenCV函数 equalizeHist 对图像进行直方图均衡化

原理

图像的直方图是什么?

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

直方图均衡化是什么?

  • 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.
  • 说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中间图所示的直方图. 均衡化的图像见下面右图.

直方图均衡化是怎样做到的?

  • 均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布), 所以强度值分布会在整个范围内展开.

  • 要想实现均衡化的效果, 映射函数应该是一个 累积分布函数 (cdf) (更多细节, 参考*学习OpenCV*). 对于直方图 , 它的 累积分布 是:

    要使用其作为映射函数, 我们必须对最大值为255 (或者用图像的最大强度值) 的累积分布  进行归一化. 同上例, 累积分布函数为:

  • 最后, 我们使用一个简单的映射过程来获得均衡化后像素的强度值:

例程

  • 咋个例程是用来干嘛的?

    • 加载源图像
    • 把源图像转为灰度图
    • 使用OpenCV函数 EqualizeHist 对直方图均衡化
    • 在窗体中显示源图像和均衡化后图像.
  • 下载例程: 点击 这里

  • 例程一瞥:

#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;char* source_window = "Source image";char* equalized_window = "Equalized Image";/// 加载源图像src = imread( argv[1], 1 );if( !src.data ){ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;return -1;}/// 转为灰度图cvtColor( src, src, CV_BGR2GRAY );/// 应用直方图均衡化equalizeHist( src, dst );/// 显示结果namedWindow( source_window, CV_WINDOW_AUTOSIZE );namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );imshow( source_window, src );imshow( equalized_window, dst );/// 等待用户按键退出程序waitKey(0);return 0;
}

说明

  1. 声明原图和目标图以及窗体名称:

    Mat src, dst;char* source_window = "Source image";
    char* equalized_window = "Equalized Image";
    

  2. 加载源图像:

    src = imread( argv[1], 1 );if( !src.data ){ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;return -1;}
    

  3. 转为灰度图:

    cvtColor( src, src, CV_BGR2GRAY );
    

  4. 利用函数 equalizeHist 对上面灰度图做直方图均衡化:

    equalizeHist( src, dst );
    

    可以看到, 这个操作的参数只有源图像和目标 (均衡化后) 图像.

  5. 显示这两个图像 (源图像和均衡化后图像) :

    namedWindow( source_window, CV_WINDOW_AUTOSIZE );
    namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );imshow( source_window, src );
    imshow( equalized_window, dst );
    

  6. 等待用户案件退出程序

    waitKey(0);
    return 0;
    

结果

  1. 为了更好地观察直方图均衡化的效果, 我们使用一张对比度不强的图片作为源图像输入, 如下图:

    它的直方图为:

    注意到像素大多集中在直方图中间的强度上.

  2. 使用例程进行均衡化后, 我们得到下面的结果:

    这幅图片显然对比度更强. 再验证一下均衡化后图片的直方图:

    注意到现在像素在整个强度范围内均衡分布.

EqualizeHist函数相关推荐

  1. python将图像转换为8位单通道_【图像处理】OpenCV系列三十五--- equalizeHist函数详解...

    上一节,我们学习了如何对两个直方图进行比较,看两幅图像的相似度是多少,经过上节的学习,相信大家对compareHist函数已经有了一个清晰的理解,本届呢,我们学习如何对一幅图像进行均衡化! 1.函数原 ...

  2. 数字图像处理:OpenCV-Python中的直方图均衡知识介绍及函数equalizeHist详解

    一.引言 在<数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍 >(链接:https://blog.csdn.net/LaoYuanPython/a ...

  3. OpenCV 畸变校正函数undistortPoints()与remap()详解及校正效果对比

    一.概述 前面写过一篇博客–"疑问:undistortPoints()与remap()畸变校正后,结果相差很大",博客中对比了OpenCV中自带畸变校正函数undistortPoi ...

  4. OpenCV学习笔记(十六):直方图均衡化:equalizeHist()

    OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...

  5. opencv中 equalizeHist()均衡化直方图

    1.EqualizeHist函数 函数作用: 直方图均衡化,,用于提高图像的质量 2.EqualizeHist函数调用形式 C++: void equalizeHist(InputArray src, ...

  6. Qt+OpenCV联合开发(二十五)--直方图均衡化(equalizeHist)

    一.简述直方图均衡化 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法,可以用于图像增强.对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经 ...

  7. findChessboardCorners函数学习笔记

    在双目视觉应用领域,要想进行精确的操作,第一步要做的就是对摄像机的内参数进行求解,这个过程称之为标定.整个标定过程由cameraCalibrate()函数完成,测量相机焦距和便宜主要的原理是张正友标定 ...

  8. 《OpenCV3编程入门》学习笔记7 图像变换(五 )直方图均衡化

    7.5 直方图均衡化 7.5.1 概念 1.图像增强处理,图像的像素灰度变化是随机的,直方图图像高低不齐,用一定算法使直方图大致平和,通过拉伸像素强度分布范围来增强图像对比度 2.均衡化处理后的图像只 ...

  9. python bindings_OpenCV-Python Bindings 如何工作 | 六十四

    作者|OpenCV-Python Tutorials 编译|Vincent 来源|OpenCV-Python Tutorials 目标 了解: 如何生成OpenCV-Python bindings? ...

最新文章

  1. firefox+firebug
  2. Implementation of WC in JAVA
  3. python如何实现办公自动化培训_基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)...
  4. java 如何去掉http debug日志_Spring Boot手把手教学(3):从零配置logback日志
  5. python中type(12.34)_下面代码的输出结果是
  6. Swing-文本输入组件(一)
  7. JSON数据实际应用
  8. 2021最新计算机二级C语言试题
  9. Android PdfViewer预览pdf滚动或放大缩小时模糊然后正常的问题
  10. 支持xp的最高配置? 20210518
  11. Spring常用注解。
  12. 如何使用VideoProc从MKV提取字幕?
  13. UPC6615: Snuke Festival
  14. 破解Zip加密文件常用的几种方法
  15. 变身成为互联网设计师
  16. Python 安装opencv-python模块
  17. 计算机如何永久删除文件无法找回,电脑文件永久性删除了怎么办?简单五招教你恢复...
  18. 【进阶篇】全流程学习《20天掌握Pytorch实战》纪实 | Day03 | 文本数据建模流程范例
  19. wince挂起和唤醒_relayon
  20. 兄弟Brother PJ-763MF 驱动

热门文章

  1. 解决AW2013用led_classdev_register()注册red但/sys/class/leds下看不到red的问题
  2. Android开发概要记录
  3. tvpvar模型的建模步骤_3D游戏建模入门须知:次世代建模软件有哪些?零基础你都知道吗...
  4. 11G中自动收集统计信息
  5. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】...
  6. Windows App开发之集合控件与数据绑定
  7. Xcode插件,模板安装
  8. 我喜欢的设计好的网站列表
  9. DataGridVidw添加CheckBox。并通过一个 CheckBox来控制其全选。
  10. postfix+postfixadmin+extmail邮件服务器架设过程