开门见山,直方图均衡化属于图像增;强领域的范畴,为的是让灰度分布更为均匀。
直方图均衡化的实现有已下几个步骤:
1.遍历全图,计算统计各个灰度级所占的总像素的比例;
2.求联合灰度分布;
3.根据规则重新计算每个灰度级吓得灰度值;
4.更新灰度值;
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
Mat fun(Mat &image) {
int gray[256] = { 0 };
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
int k = image.at<uchar>(i,j);
gray[k]++;
}
}
for (int x = 0; x < 256; x++) {
gray[x] = (double)gray[x] / (image.rows*image.cols);
}
for (int m = 0; m < 256; m++) {
gray[m + 1] = gray[m + 1] + gray[m];
}
for (int a = 0; a <image.rows; a++) {
for (int b = 0; b < image.cols; b++) {
int k = image.at<uchar>(a, b);
image.at<uchar>(a,b) = (uchar)(255 * gray[k] + 0.5);
}
}
imshow("hist", image);
return image;
}
void main() {
Mat image1 = imread("1,jpg", 0);
fun(image1);
waitKey(0);
getchar();
}