• 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);
        
    }

    效果展示:

  • 相关阅读:
    SpringMVC将表单对象序列化成Json字符串提交,以List接收
    Spring boot下添加filter
    如何将查出的日期Data类型以Json格式输出到前端
    ajax传递给后台数组参数方式
    Spring boot + Gradle + Eclipse打war包发布总结
    Spring-data-jpa详解
    SpringMVC配置过程中出现的问题!
    spring 集成shiro 之 自定义过滤器
    完全跨域的单点登录
    Java8 Lambda表达式
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/12341056.html
Copyright © 2020-2023  润新知