关于直方图均衡化的原理,这篇博客已经说得很透彻了。借用opencv库,代码实现远比数学原理简单。
#include <unistd.h>
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
cv::Mat src_img = cv::imread(argv[1], cv::IMREAD_GRAYSCALE);
cv::Mat dst_hist;
cv::equalizeHist(src_img, dst_hist);
cv::imshow("preview", dst_hist);
cv::waitKey(20000);
return 0;
}
编译:
g++ hist.cpp -o hist `pkg-config --cflags --libs opencv`
测试:
(原图)
VS
(均衡化后)