Opencv3笔记20——直方图均衡化

概念和特色

均衡化处理后的图像只能是近似均匀分布,均衡化图像的动态范围扩大了。可是本是扩大了量化间隔,量化级别减小。原来灰度不一样的像素通过处理后可能变的相同,造成了一片相同的灰度区域ios

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

函数原型c++

void equalizaeHist(InputArray src,OutputArray dst)

步骤:
1. 计算输入图像直方图 H
2. 进行直方图归一化,直方图的组距的和为255
3. 计算直方图积分 H ( i ) = 0 j i H ( j )
4. 以 H 做为查询表进行图像变换 d s t ( x , y ) = H ( s r c ( x , y ) ) web

示例程序

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;


int main()
{
    Mat srcImage, dstImage;

    //输入原始图像
    srcImage = imread("1.jpg");
    if (!srcImage.data)
    {
        printf("读取图片错误~!\n");
        return false;
    }
    cvtColor(srcImage, srcImage, COLOR_BGR2GRAY);
    imshow("原始图", srcImage);

    //进行直方图均衡化
    equalizeHist(srcImage, dstImage);

    //显示结果
    imshow("通过直方图均衡化后的图", dstImage);

    waitKey(0);
    return 0;
}

这里写图片描述