#include<iostream>
#include "opencv2/imgcodecs.hpp"
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
int main()
{
cv::Mat image = cv::imread("D:\\用户目录\\我的图片\\2018-05-11\\001.JPG",-1);
if (image.empty())
{
std::cout << "打开图片失败" << std::endl;
system("pause");
return -1;
}
cv::namedWindow("原图", cv::WINDOW_AUTOSIZE);
cv::imshow("原图", image);
if (image.channels()>=3)
{
//RGB分别均衡
//std::vector<cv::Mat> channels;//也可以使用vector向量思路
cv::Mat channels[3];
cv::split(image, channels);
for (int i = 0; i < 3; i++)
{
cv::equalizeHist(channels[i], channels[i]);
}
cv::Mat result;
cv::merge(channels, 3, result);
cv::imwrite( "C:\\Users\\Administrator\\Desktop\\psb3.jpg",result);
cv::namedWindow("均衡后", cv::WINDOW_AUTOSIZE);
cv::imshow("均衡后", result);
}
cv::waitKey(6000);
cv::destroyAllWindows();
return 0;
}
原图:
均衡后:
优缺点:这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。
这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度;变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。