opencv-equalizeHist均衡化直方图-增强对比度

 直方图均衡化是一种常见的增强图像对比度的方法,使用该方法可以增强局部图像的对比度,尤其在数据较为相似的图像中作用更加明显

直方图是什么:

  • 直方图是图像中像素强度分布的图形表达方式.
  • 它统计了每一个强度值所具有的像素个数.

直方图均衡化是什么:

  • 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.

注意: 直方图均衡化只能处理单通道

 

灰度单通道 

1.png

  

复制代码
#include<opencv2/opencv.hpp>
#include<iostream>

int main(int argc, char** argv) {

    cv::Mat src = cv::imread("D:/bb/tu/1.png");
    imshow("src", src);

    cv::Mat gray, dst;
    cvtColor(src, gray, cv::COLOR_BGR2GRAY);
    equalizeHist(gray, dst);//直方图均衡化
    imshow("dst", dst);

    cv::waitKey(0);
    return 0;
}
复制代码

彩色图方法一 

对BGR三个通道分别处理,再合并 

复制代码
#include<opencv2/opencv.hpp>
#include<iostream>

int main(int argc, char** argv) {

    cv::Mat src = cv::imread("D:/bb/tu/1.png");
    imshow("src", src);

    std::vector<cv::Mat> chan;
    cv::split(src, chan);//通道分割
    cv::Mat blue, green, red,dst;
    blue = chan.at(0);
    green= chan.at(1);
    red= chan.at(2);

    //对BGR通道分别做直方图均衡化
    equalizeHist(blue, blue);
    equalizeHist(green, green);
    equalizeHist(red, red);

    merge(chan, dst);//合并通道
    imshow("dst", dst);


    cv::waitKey(0);
    return 0;
}
复制代码

 

 

彩色图方法二 

通过对HSV色彩空间的V通道进行直方图均衡化,再合并H,S,V三个通道后转化为BGR图像 

V通道简单来说就是图像明暗通道

HSV颜色模型:看  https://baike.baidu.com/item/HSV/547122?fr=aladdin

复制代码
#include<opencv2/opencv.hpp>
#include<iostream>

int main(int argc, char** argv) {

    cv::Mat src = cv::imread("D:/bb/tu/1.png");
    imshow("src", src);

    cv::Mat hsv,v,dst;
    cv::cvtColor(src,hsv, cv::COLOR_BGR2HSV);//转化为HSV图像
    std::vector<cv::Mat> chan;
    cv::split(hsv, chan);//通道分割
    equalizeHist(chan.at(2), chan.at(2));//对v通道直方图均衡化
    merge(chan, dst);//合并通道
    cv::cvtColor(dst, dst, cv::COLOR_HSV2BGR);//HSV转化为BGR图像
    imshow("dst", dst);    


    cv::waitKey(0);
    return 0;
}
复制代码

 

  

 

posted @   天子骄龙  阅读(313)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-12-21 Arduino--红外接收模块
点击右上角即可分享
微信分享提示

目录导航