calcGrayHist() 함수는 내부에서 OpenCV 함수 calcHist()를 이용하여 그레이스케일 영상의 히스토그램을 표현하는 행렬 hist를 구하여 반환합니다. 이때 반환되는 hist는 CV_32FC1 타입을 갖는 256×1 크기의 행렬입니다. 즉, hist 행렬의 행 개수는 256이고, 열 개수는 1입니다.
calcGrayHist() 함수로 구한 히스토그램 행렬을 막대그래프 형태로 나타내려면 여러분이 직접 hist 행렬을 참조하여 막대그래프 영상을 생성해야 합니다. 256개의 빈을 갖는 hist 행렬로부터 가로가 256픽셀, 세로가 100픽셀인 크기의 히스토그램 그래프 영상을 생성하는 getGrayHistImage() 함수를 코드 5-8에 나타냈습니다. getGrayHistImage() 함수는 히스토그램 그래프에서 최대 빈도수를 표현하는 막대그래프 길이가 100픽셀이 되도록 그래프를 그립니다.
코드 5-8 그레이스케일 영상의 히스토그램 그래프 그리기 [ch05/histogram]
01 Mat getGrayHistImage(const Mat& hist) 02 { 03 CV_Assert(hist.type() = = CV_32FC1); 04 CV_Assert(hist.size() = = Size(1, 256)); 05 06 double histMax; 07 minMaxLoc(hist, 0, &histMax); 08 09 Mat imgHist(100, 256, CV_8UC1, Scalar(255)); 10 for (int i = 0; i < 256; i++) { 11 line(imgHist, Point(i, 100), 12 Point(i, 100 - cvRound(hist.at<float>(i, 0)*100/histMax)), Scalar(0)); 13 } 14 15 return imgHist; 16 }