opencv自实现直方图均衡化
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //直方图均衡化 bool HistEqualize(Mat gray, Mat result) { map<int, int>mp; for(int i=0;i<gray.rows;i++) uchar *ptr = gray.data + i*gray.cols; for(int j=0;j<gray.cols;j++){ int value = ptr[j]; mp[valuse] = ptr[j]; } } map<int,double>valuePro; int sum = gray.cols * gray.rows; double sumPro = 0; for(int i=0;i<256;i++){ sumPro += 1.0*mp[i] / sum; valuePro[i] = sumPro; } for(int i=0;i<gray.rows;i++){ uchar *ptr1 = gray.data + i*gray.cols; for(int j=0;j<gray.cols;j++){ int value = ptr1[j]; double p = valuePro[value]; result.at<uchar>(i,j) = p*value; } } return result; } int main() { Mat img = imread("D:\\Picture\\1.png"); Mat image = img.clone(); Mat imageRgb[3]; split(img, imageRgb); for(int i=0;i<3;i++){ HistEqualize(imageRgb[i], imageRgb[i]); } merge(imageRgb, 3, img); imshow("原图", image); imshow("直方图", img); waitKey(0); return 0; }