直方图的处理和对比
直方图均衡化
- 用一定的算法使直方图大致平和的方法。通过拉伸像素强度分布范围来增强图像对比度的一种发放(即输出的直方图是均匀的)
- 在原始图像对比度很高的情况下,如果均衡化,对比度会降低
- 均衡化的图像如果再对其均衡化,图像不会有任何改变。
源码实现
# include<iostream>
# include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
Mat HistEq(Mat& srcImage);
Mat rgbTOgray(Mat srcImg);
int main()
{
Mat srcImg = imread("C:/Users/sualab/Desktop/cow.jpg");
Mat resultImg;
if (!srcImg.data)
{
cout << "图片不存在" << endl;
}
if (srcImg.channels() == 3)
{
Mat gray = rgbTOgray(srcImg);
resultImg = HistEq(gray);
imshow("gray", gray);
imshow("result", resultImg);
}
if (srcImg.channels() == 1)
{
resultImg = HistEq(srcImg);
imshow("gray", srcImg);
imshow("result", resultImg);
}
waitKey(0);
return 0;
}
Mat rgbTOgray(Mat srcImg)
{
int rows = srcImg.rows;
int cols = srcImg.cols;
Mat gray(rows, cols, CV_8UC1);
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
gray.at<uchar>(i, j) = (int)(0.114 * srcImg.at<Vec3b>(i, j)[0] + 0.587 * srcImg.at<Vec3b>(i, j)[1] + 0.299 * srcImg.at<Vec3b>(i, j)[2]);
}
}
return gray;
}
Mat HistEq(Mat& srcImage)
{
int rows = srcImage