關於直方圖均衡化的原理,這篇博客已經說得很透徹了。借用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
(均衡化後)