首页 > 其他分享 >OpenCV(cv::equalizeHist())

OpenCV(cv::equalizeHist())

时间:2024-09-20 11:04:40浏览次数:9  
标签:均衡化 直方图 OpenCV equalizeHist 灰度 图像 对比度 cv

目录



cv::equalizeHist() 是 OpenCV 中用于图像直方图均衡化的函数。该函数主要用于增强图像的对比度,尤其是在图像的光照条件不均匀或整体对比度较低的情况下,直方图均衡化可以有效改善图像的细节。



1. 函数定义

void cv::equalizeHist(InputArray src, OutputArray dst);

参数:

  1. src (InputArray):

    • 输入图像。必须是单通道的 8 位图像,即灰度图像(CV_8UC1)。该图像表示的是灰度级别,范围为 [0, 255]。
  2. dst (OutputArray):

    • 输出图像。将存储直方图均衡化后的结果图像,与输入图像大小相同,类型也为 8 位单通道(灰度图像)。


2. 函数原理

cv::equalizeHist() 通过调整输入图像的直方图,使其变得更加均匀分布,增加图像的对比度,特别是在亮度或暗度区域较为集中的图像中。

直方图均衡化 是通过以下步骤进行的:

  1. 计算直方图:

    • 对输入图像中的每个灰度值(0 到 255)计算其出现频率,形成灰度值的概率分布。
  2. 计算累积分布函数(CDF, Cumulative Distribution Function):

    • 将直方图中各个灰度值的频率累计,得到累积分布函数。累积分布函数描述了灰度值在图像中的分布情况。
  3. 计算新的灰度值:

    • 利用累积分布函数将原始的灰度值映射为新的灰度值,使灰度值更加均匀分布。这种映射将图像的对比度范围扩展到整个灰度范围(0 到 255),从而增强对比度。
  4. 生成输出图像:

    • 根据新的灰度值生成输出图像。均衡化后的图像具有更好的对比度和更丰富的细节。


3. 示例

cv::Mat src = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);  // 读取灰度图像
cv::Mat dst;
cv::equalizeHist(src, dst);  // 进行直方图均衡化
cv::imshow("Original Image", src);
cv::imshow("Equalized Image", dst);
cv::waitKey(0);

在此示例中,原始图像 src 是一个灰度图像,cv::equalizeHist() 对其进行直方图均衡化,均衡化后的图像存储在 dst 中。接着我们显示原始图像和均衡化后的图像。

图像均衡化前后的效果

  • 均衡化前:直方图可能集中在某个特定的灰度值范围内(例如亮度较低的图像可能集中在暗部区域)。
  • 均衡化后:直方图被拉伸,灰度值分布更加均匀,整个灰度级别的范围更加广泛。图像的对比度增强,细节更加清晰。


4. 应用场景

  • 低对比度图像增强:
    cv::equalizeHist() 常用于增强低对比度的图像,尤其是光照不均匀的图像。例如,拍摄于阴天或暗光环境下的图像,可能会出现整体对比度偏低的现象,通过直方图均衡化可以改善细节和对比度。

  • 医学影像处理:
    在处理医学影像(如 X 光片)时,直方图均衡化可以帮助突出特征细节。

  • 视频处理:
    在视频处理任务中,特别是需要对每帧图像进行增强时,直方图均衡化可以帮助提升视频帧的视觉质量。



5. 注意事项

  1. 仅适用于灰度图像:

    • cv::equalizeHist() 仅适用于单通道灰度图像。如果你希望对彩色图像进行直方图均衡化,你需要将其转换为灰度图像或者对彩色图像的每个通道单独进行均衡化处理。
  2. 直方图均衡化的效果取决于图像内容:

    • 对于对比度本身已经非常高的图像,直方图均衡化可能不会显著提升效果,甚至可能增加噪声或导致过度对比。
  3. 噪声放大问题:

    • 在均衡化过程中,低频灰度值的像素可能会被放大,从而导致噪声增强。因此,适用于噪声较少或已处理过噪声的图像。


6. 实际效果

假设你有一个对比度较低的灰度图像,均衡化后的效果通常表现为:

  • 原图中的暗部和亮部细节更加清晰。
  • 整体图像的亮度分布更加均匀,不再出现某些灰度级别上占据大量像素的现象。

通过直方图均衡化,你可以快速提升图像的对比度,从而改善图像的视觉效果。



标签:均衡化,直方图,OpenCV,equalizeHist,灰度,图像,对比度,cv
From: https://www.cnblogs.com/keye/p/18422060

相关文章

  • OpenCV(cv::divide())
    目录1.函数定义2.工作原理3.示例3.1矩阵除法3.2矩阵和标量的除法3.3使用缩放因子4.注意事项5.应用场景cv::divide()是OpenCV中用于执行数组或标量的逐元素除法操作的函数。它允许对矩阵进行元素级的除法操作,支持两种使用方式:矩阵与矩阵之间的除法,或矩阵与标量之间的......
  • 设计原理图:417-基于XCVU9P+ C6678的8T8R的无线MIMO平台
    基于XCVU9P+C6678的8T8R的无线MIMO平台  一、板卡概述     北京太速科技板卡基于TI TMS320C6678DSP和XCVU9P高性能FPGA,FPGA接入4片AD9361无线射频,构建8输入8输出的无线MIMO平台,丰富的FPGA资源和8核DSP为算法验证和信号处理提供强大能力。  ......
  • 变脸大师:基于OpenCV与Dlib的人脸换脸技术实现
    目录简介 重新简介思路解析1.加载人脸检测器和特征点预测模型2.读取两张人脸图片3.获取人脸的特征点4.使用Delaunay三角剖分5.仿射变换三角形6.三角形变形并复制7.脸部轮廓掩模8.无缝克隆换脸9.缩放图像10.显示换脸结果整体代码效果展示准备换脸的......
  • Shiro-550—漏洞分析(CVE-2016-4437)
    目录漏洞原理源码分析加密过程解密过程漏洞复现漏洞原理Shiro-550(CVE-2016-4437)反序列化漏洞在调试cookie加密过程的时候发现开发者将AES-CBC用来加密的密钥硬编码了,并且所以导致我们拿到密钥后可以精心构造恶意payload替换cookie,然后让后台最后解密的时候进行反序列化我们的......
  • CVPR(Conference On Computer Vision and Pattern Recognition)近十年研究热点追踪
    CVPR(ConferenceOnComputerVisionandPatternRecognition)近十年研究热点追踪CVPR近十年(2015~2024)研究热点追踪......
  • OpenCv(一)
    计算机视觉和机器视觉的区别计算机视觉(ComputerVision)和机器视觉(MachineVision)是两个密切相关但又有区别的领域。两者在应用、技术和目标上都有所不同。**计算机视觉:**主要是研究如何使计算机能够理解和处理图像和视频数据。其目标是从视觉数据中提取有用的信息,实现图像......
  • OpenCV(cv::Sobel())
    目录1.函数定义2.工作原理2.1Sobel核2.2计算过程(1)x方向的Sobel卷积计算(2)y方向的Sobel卷积计算(3)合并x和y方向的梯度2.3示例3.示例4.使用场景总结cv::Sobel()是OpenCV中用于计算图像的梯度(边缘)的常用函数之一。它实现了Sobel滤波器,这是一种常见......
  • OpenCV(cv::magnitude())
    目录1.函数定义2.使用场景3.示例4.注意事项cv::magnitude()是OpenCV中用于计算向量的大小(模)的函数。它可以处理二维向量的模,也可以用于计算图像中每个像素点的梯度大小,通常在处理图像梯度或傅里叶变换时使用。1.函数定义voidcv::magnitude(InputArrayx,......
  • 什么是轻量应用服务器?与云服务器CVM对比有哪些区别?
    对比云服务器CVM,轻量应用服务器TencentCloudLighthouse更聚焦于中小企业、开发者、云计算入门者、学生等用户群体。相比云服务器CVM更加简单易用,精简了云服务器CVM的高阶概念及功能,提供高带宽流量包并以高性价比的套餐形式整体售卖基础云资源,将热门开源软件融合打包实现一......
  • 9月京东云云服务器CVM价格配置表汇总-金秋上云!
    轻量云主机是面向中小企业、开发者打造的预装精选软件、开箱即用的主机产品,快速搭建网站、电商、企业低代码工具箱,云盘、共享文档、知识库、开发测试环境等,相对普通云主机,按套餐购买更优惠、控制台可视化管理,运维更简单,提供更便捷上云体验。轻量云主机这个专区是本次活动的主要专区......