直方图均衡化:
直方图(Histogram): 是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。
直方图反映了图像灰度的分布情况。是图像的统计学特征。
直方图均衡化: 是一种提高图像对比度的方法,拉伸图像灰度值范围。让图像更均衡。对于图像的特征提取是非常有用的
通过remap我们知道可以将图像灰度分布从一个分布映射到另外一个分布,然后在得到映射后的像素值即可。
提升对比度:就是图像中所有的像素值之间的差异都比较明显
API:
equalizeHist(
src,8单通道
dst)
*/
代码:
#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
#include <string>
#include<fstream>
using namespace cv;
using namespace std;
int main() {
Mat src, graysrc,dst;
src = imread("C:\\Users\\Administrator\\Desktop\\pic\\z2.jpg");
imshow("input", src);
cvtColor(src, graysrc,CV_RGB2GRAY);
imshow("graysrc", graysrc);
equalizeHist(graysrc, dst);
imshow("dst", dst);
waitKey(0);
}
结果:
直方图计算:
我们队图像灰度,梯度,每个像素的角度,等一切图像的属性值都可以建立直方图,基于图像像素灰度直方图最常见。
直方图的几个常见属性:
dims表示维度。对灰度图像来说只有一个通道值dims=1
bins表示维度中子区域大小划分,bins=256,划分为256个等级
range表示值的范围,灰度值范围0-255
API:
calcHist(
const Mat*src,//输入图像的指针
int images,//图像数目, 这些图像要有相同大大小,相同的深度(CV_8U CV_16U CV_32F)
const int*channels,//通道数
mask,//可选的掩码 可选的掩码,不使用时可设为空。要和输入图像具有相同的大小,在进行直方图计算的时候,只会统计该掩码不为0的对应像素
hist,//输出直方图数据
int dims,//维数
const int*histsize,//直方图级数
const float*ranges,//值域范围
bool uniform,//默认true 是否进行归一化
bool accumulate)//默认false 累积标志
代码:
#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
#include <string>
#include<fstream>
using namespace cv;
using namespace std;
int main() {
Mat src,b_hist,g_hist,r_hist;
src = imread("C:\\Users\\Administrator\\Desktop\\pic\\1-H.jpg");
imshow("input", src);
//分通道显示