python opencv直方图均衡化_OpenCV直方图均衡化

通常我们很难观察一幅非常亮或暗的图像的细节信息,因此对于差异较大的图像,我们可以尝试改变其图像灰度分布来使图像灰度阶分布尽量均匀,进而增强图像细节信息。直方图均衡是拉伸各个像素分布来实现图像增强的,以累计分布函数变换基础,通过特定映射转换成一种更宽的分布,其核心就是把灰度分布映射成均匀分布

直方图均衡的目的是利用动态范围内的所有灰度阶,因此对于映射函数y=f(x),要求x在(0,1)的灰度是连续的,每一个元素都能得到相应的元素一一对应可得到下式:

p(x)dx = p(y)dy

对于均衡化的输出图像p(y) = 1,则同时积分得

16e05b0e1824bcef5c3b5cd204ab6e07.png

即映射函数为:

y = f(x) = p(x) – p(0)

直方图均衡化算法的步骤如下:

(1) 获取输入图像的直方图

(2) 求累计分布直方图,构建查找表

(3) 通过图像映射,计算新的图像像素分布

代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc,char* argv[])
{
    cv::Mat srcImage = cv::imread("E:/CodeBlocks/data/lena.jpg");
    if (!srcImage.data)
    {
        std::cerr << "fail to load image"<< std::endl;
        exit(-1);
    }
    cv::Mat grayImage,histImage;
    cv::cvtColor(srcImage,grayImage,cv::COLOR_BGR2GRAY);
    cv::equalizeHist(grayImage,histImage);
    cv::imshow("grayImage",grayImage);
    cv::imshow("histImage",histImage);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

结果:

2bf46af992c73c82d12c6f26bd429c32.png

8ac0e5e4257db4fe039181a57e072666.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值