Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm equalizeHist() trong OpenCV là gì?


Giới thiệu

Histogram ảnh biểu diễn tần suất các giá trị cường độ pixel. Trục X: mức xám (0-255), Trục Y: số pixel.

Cân bằng histogram (Histogram Equalization) cải thiện độ tương phản bằng cách kéo giãn phạm vi cường độ. Hàm equalizeHist() thực hiện điều này.

Cú pháp

equalizeHist(Ma_trận_nguồn, Ma_trận_đích)

Chỉ áp dụng cho ảnh đơn kênh (grayscale). Với ảnh màu, chuyển sang không gian YCrCb, cân bằng kênh Y (luminance), sau đó chuyển lại BGR.

Chương trình demo equalizeHist ảnh màu

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;

int main() {
    Mat original = imread("sky.jpg");
    vector<Mat> channels;
    Mat hist;
    cvtColor(original, hist, COLOR_BGR2YCrCb);
    split(hist, channels);
    equalizeHist(channels[2], channels[2]); // Kênh V (Value) ở chỉ số 2 trong YCrCb? Sửa: YCrCb kênh 0=Y, 1=Cr, 2=Cb. Thường cân bằng kênh Y (0).
    merge(channels, hist);
    cvtColor(hist, hist, COLOR_YCrCb2BGR);
    namedWindow("original"); imshow("original", original);
    namedWindow("hist"); imshow("hist", hist);
    waitKey(0);
    return 0;
}

Kết quả

Ảnh gốc và ảnh sau cân bằng histogram hiển thị song song. Ảnh cân bằng có độ tương phản tốt hơn, chi tiết rõ nét hơn.