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 @ 2021-12-21 08:47  天子骄龙  阅读(279)  评论(0编辑  收藏  举报