什么是直方图
就是数集内元素的概率分布图
图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,根据此生成直方图,称为图像直方图,直方图反映了图像的灰度分布情况,是图像统计学的特征
直方图均衡化
是一种提高图像对比度的方法,即将图像灰度分布相对更加均匀,拉伸图像灰度值的范围
如何实现,通过前面接触的remap我们知道可以将图像灰度分布从一个分布映射到另外一个分布,然后再得到映射后的像素值即可。
API说明
API
cv::equalizeHist(InputArray src,OutputArray dst)
参数说明
- 第一个参数
InputArray
类型src
,输入图像必须是8-bit单通道图像 - 第二个参数
OutputArray
类型dst
,输出图像
代码演示
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
#define Pic_Path "/home/image/Pictures/my_picture/"
#define Pic_Name "model1.jpg"
int main(void)
{
string pic = string(Pic_Path) + string(Pic_Name);
cout << pic << endl;
cv::Mat src;
//读取原始图片
src = cv::imread(pic.c_str());
if(src.empty())
{
cout << "图片不存在" << endl;
return -1;
}
cv::namedWindow("原始图片",cv::WINDOW_AUTOSIZE);
cv::imshow("原始图片",src);
cv::Mat gray_src,dst;
//灰度转换
cv::cvtColor(src,gray_src,cv::COLOR_BGR2GRAY);
cv::equalizeHist(gray_src,dst);
cv::namedWindow("直方图均衡化",cv::WINDOW_AUTOSIZE);
cv::imshow("直方图均衡化",dst);
cv::waitKey(0);
cv::destroyAllWindows();
}