22 OpenCV直方图均衡化equalizeHist

本文介绍了图像直方图的概念,直方图均衡化的作用和原理,以及如何使用OpenCV的equalizeHist函数进行直方图均衡化处理。直方图均衡化可以有效提升图像的对比度,通过对灰度值的累积分布函数进行归一化处理,创建灰度映射表并更新像素值。示例展示了具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、图像直方图Histogram

图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况,是图像的统计学特征。
在这里插入图片描述

二、直方图均衡化

  • 直方图均衡化是一种提高图像对比度的方法,拉伸图像灰度值范围,让图像更均衡。对于图像的特征提取是非常有用的
    在这里插入图片描述
    在这里插入图片描述

  • 直方图均衡化是通过使用累积函数对灰度值进行“调整”以实现对比度的增强,其中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。也就是把一个分布(给定的直方图)映射到另一个分布(一个更宽更统一的强度值分布),所以强度值分布会在整个范围内展开,要实现均衡化的效果,映射函数应该是一个累积分布函数(cdf)。对于直方图H(i),它的累积分布H’(i)是:
    在这里插入图片描述
    要使用其作为映射函数,我们必须对最大值为255(或者用图像的最大强度值)的累积分布H’(i)进行归一化,同上,累积分布函数为:
    在这里插入图片描述
    最后,使用一个简单的映射过程来获得均衡化后像素的强度值:
    在这里插入图片描述
    图像直方图均衡化的实质是近似均匀分布,均衡化图像的动态范围扩大了,但其被值扩大了量化间隔,而量化级别反而减少了,原来灰度不同的像素经处理后可能变得相同,这样就形成了一片相同灰度的区域,各区域之间有明显的边界,造成对比度提高的视觉效果。如果原始图像对比度本来就很高,这再均衡化会降低图像对比度。

三、equalizeHist

void cv::equalizeHist   (   InputArray      src,
        OutputArray     dst 
    )   
  • src:8-bit单通道 输入图像
  • dst: 目标图像,与原图像有相同的尺寸和类型

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

四、示例

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat src, dst;
	//1. 读取图像
	src = imread("images/02.png");
	if (src.empty()) {
		cout << "Usage: ./Histogram_Demo <path_to_image>" << endl;
		return -1;
	}

	// 2. 将其转换为灰度:
	cvtColor(src, src, COLOR_BGR2GRAY);

	// 3. 使用函数cv :: equalizeHist应用直方图均衡
	equalizeHist(src, dst);

	// 4. 显示两个图像(原始图像和均衡图像):
	imshow("Source image", src);
	imshow("Equalized Image", dst);

	waitKey(0);
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值